From d39988012c8cf5db6e7ca8a4be4c4abcf1c87f4d Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Tue, 10 Nov 2026 22:05:04 -0500 Subject: [PATCH 1/8] test(dimred): establish M2.8 figure contracts and counterexamples --- audit/M28_DIMRED_VISUALIZER.md | 128 ++++++ audit/check_m28_boundaries.py | 235 ++++++++++ audit/check_m28_evidence.py | 430 ++++++++++++++++++ tests/conftest.py | 62 +++ tests/proofs_dimred_visualizer.py | 314 +++++++++++++ tests/test_dimred_visualizer.py | 706 ++++++++++++++++++++++++++++++ 6 files changed, 1875 insertions(+) create mode 100644 audit/M28_DIMRED_VISUALIZER.md create mode 100644 audit/check_m28_boundaries.py create mode 100644 audit/check_m28_evidence.py create mode 100644 tests/proofs_dimred_visualizer.py create mode 100644 tests/test_dimred_visualizer.py diff --git a/audit/M28_DIMRED_VISUALIZER.md b/audit/M28_DIMRED_VISUALIZER.md new file mode 100644 index 0000000..f2badfe --- /dev/null +++ b/audit/M28_DIMRED_VISUALIZER.md @@ -0,0 +1,128 @@ +# M2.8 — DimRedVisualizer scientific figure audit + +2026-11-10 (Quebec) · Refs #43 · tests, evidence and documentation only. +Worktree `AstroSpectro-m28`, branch `audit/43-dimred-visualizer`. +Verified remote main/base **39dad874610745ccd456d26972e90f6fb3a11405**, +PR99 merged, no open PR at start. Main checkout was clean at1e22663 and is +preserved. Production blob **624b857bca5833c3401204b0a592b9ae6ffc2902**. +Actual inventory: **38 methods**, including initializer and two helpers, +not31. Entire3224-line source read. AGENTS v1.3 fetched from current main. + +## Delivery contract and evidence boundaries + +AP: acquired evidence on the specific tested contract; PA: partial examination; +NA: not validated; B: externally blocked. No module-wide scientific approval +is inferred. No external blocker identified. No production/notebook/data/model, +dependency or workflow changes authorized here. First Claude review and human +merge decision follow the Draft PR. M2.9 is outside scope. + +The dedicated tests inspect numeric arrays, artist coordinates, signed values, +histogram areas, interval endpoints, colors, labels and actual exports. Synthetic +observation markers are asymmetric, class sizes unequal, physical values unique, +and metadata indices nonconsecutive. Equal-length external permutations remain +undetectable without IDs: this API accepts positional arrays and never joins +on `obsid`. A matching shape is not identity evidence. + +The real PCA integration uses six axial points with covariance eigenvalue ratio +9:4:1; discarded residual energy gives MSE5/9 then1/9. PCA sign is arbitrary: +the loading test uses sign equivariance and exact supplied signed values, never +a preferred global sign. Family MSE uses unequal groups with feature MSEs +1,4 versus9,16,25: means2.5 and50/3; SDs are sample dispersions **among feature +means**, not among stars. Global MSE11 weights the five features equally. + +Trustworthiness is executed by actual scikit-learn and checked against a +separate scalar rank-penalty implementation (no distance ties). Identity geometry +gives1; a row permutation changes neighborhoods. Subsampling is paired and +repeatable; this cannot establish the external identity of supplied observations. +[Primary definition and domain](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.trustworthiness.html). + +KDE uses actual SciPy plus a separately injected analytic standard normal. +For the latter, polar integration gives enclosed mass `1-2*pi*threshold`. +An independent larger401x401 quadrature domain includes tails omitted by the +display grid. The601x601 green oracle control verifies known68/95/99% solutions +within.002. Red numerical comparisons allow.006 for contour-cell discretization, +not observational uncertainty. Density percentiles are not mass quantiles. +[SciPy kernel density API](https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.gaussian_kde.html). + +## Method inventory — input, transformation, output, contract, risk, test gap + +All tests below live in `tests/test_dimred_visualizer.py` unless designated +red (`tests/proofs_dimred_visualizer.py`, explicitly executed only in archive). +No dedicated visualizer suite existed at base. Prior PCA integration tested a +correlation heatmap; AE tests inspected interpolation geometry. These were +limited existing boundaries, not previous coverage of every figure. + +| Method | Input -> transformation -> output | Contract/test evidence | Status and residual risk | +|---|---|---|---| +| `__init__` | figure options/output path -> mkdir -> object | `save_defaults_override_no_output_and_write_failure` | AP mkdir/options; filesystem ACL exhaustion NA | +| `_save` | figure/path -> parent mkdir/savefig -> None | `real_export_readable_and_same_semantic_figure`, defaults/error | AP real PNG/PDF and write failure; PDF content rendering PA | +| `_draw_loadings_family_donut` | family weights -> pie angles + legend -> None | `family_weights_bar_and_donut_angles` | AP normalized valid weights; zero weights boundary PA | +| `plot_variance_explained` | PCA ratios/count -> percentages/cumsum -> `(fig,axes)` | real covariance oracle, red truncated annotation | AP numeric; misleading truncation confirmed | +| `plot_loadings_heatmap` | loading frame -> abs-max ranking -> `(fig,ax)` | asymmetric signed matrix + sign reversal | AP tested selection/values; excess requested PC labels PA | +| `plot_loadings_bar` | top loading frame -> signed sorting/colors -> `(fig,ax)` | signed values and variance text | AP numeric; PCA sign has no physical orientation guarantee | +| `plot_loadings_family_donut` | two family frames -> two donut helpers -> `(fig,axes)` | angles/legend weights | AP normalized inputs; hardcoded183-feature title PA | +| `plot_loadings_family_bar` | family union -> percentages -> `(fig,ax)` | disjoint family weights80/20 vs30/70 | AP numeric; empty/zero-group policy PA | +| `plot_correlation_heatmap` | correlation frame -> labels/image/text -> `(fig,ax)` | exact matrix/ticks/finite annotations | AP representation; estimator and metallicity interpretation NA | +| `plot_embedding` | Z/class/scalar -> positional scatter -> `(fig,ax)` | classes/plain/continuous+missing, percentiles | AP paired valid arrays; invalid coordinates boundary PA | +| `plot_embedding_grid` | Z/y/meta -> class+parameter panels -> `(fig,axes)` | coherent permutation/absent column/missing rows | AP nominal; all-missing/Inf scaling PA | +| `plot_stability` | ordered report -> bars/reference-excluded mean -> `(fig,ax)` | actual producer with controlled fit; asymmetric mean | AP producer order0..N-1; arbitrary reordered reports PA; stability not astrophysics | +| `plot_reconstruction_error` | PCA summary -> mean±SD+elbow -> `(fig,ax)` | actual discarded-energy MSE and band | AP statistics; nonuniform count elbow heuristic PA; log zero hidden | +| `plot_eigenspectra` | PCA vectors/wavelength -> line+markers -> `(fig,axes)` | exact wavelength/values/in-range markers,1/3/10 requested | AP custom marker path; default mathtext and fixed3-PC title PA | +| `plot_hr_diagram_embedding` | meta/Z component -> finite triplets -> `(fig,ax)` | missing on distinct rows, two axes, units/inversion | AP provided values; actual stellar stages NA | +| `plot_training_history` | train/val/LR -> curves/best epoch -> `(fig,axes)` | nonlast minimum, distinct series, real explicit export | AP numeric; direct output_dir mismatch red; train-loss semantics #84 | +| `plot_ae_embedding` | 2D Z/y/meta -> class+physical panels -> `(fig,axes)` | coherent row permutation/missing physical row | AP nominal; no-physical scalar axes red | +| `plot_ae_reconstruction` | X/reconstruction -> seeded examples/MSE -> `(fig,axes)` | row values/exact manual MSE,1/3/6 samples | AP valid; excess sample axes red; zero/negative boundary PA | +| `plot_ae_vs_pca` | method/count/MSE frame -> distinct curves -> `(fig,ax)` | AE.17/.11 versus PCA.9/.03 | AP representation; training/comparison provenance NA | +| `plot_latent_interpolation` | latent/features path -> alpha+variable features -> `(fig,axes)` | endpoints/alphas/nontrivial feature ordering | AP geometry only; physical consistency #85 NA | +| `plot_ae_error_distribution` | MSE/y -> normalized class hist/mean/median -> `(fig,ax)` | area1/class, mean!=median, unequal counts | AP<=4classes; fifth class omission red | +| `plot_hdbscan_clusters` | real analyzer attributes/Z/y -> cluster+class scatters -> `(fig,axes)` | nonconsecutive IDs, noise/one cluster, exact colors/rows | AP points; incompatible colorbar red | +| `plot_hdbscan_hr` | Z/analyzer/meta -> finite HR + T overlay -> `(fig,axes)` or `(None,None)` | missing column sentinel, finite pairs/temperature | AP points; colorbar red, empty HR percentile PA | +| `plot_hdbscan_sensitivity` | sweep frame -> two distinct curves -> `(fig,axes)` | exact counts/noise/x and marked parameters | AP supplied sweep; clustering backend NA here | +| `plot_hdbscan_presentation` | presentation labels/map/meta -> paired plots -> `(fig,axes)` | counts/positions with/without HR | AP geometry; fixedmin_size300 and anomaly/population prose PA (#78) | +| `plot_hdbscan_present_split` | same -> separate UMAP/HR -> `(fig_umap,fig_hr)` with HR=None possible | paired rows/colors; missing HR; orientation | AP normal; percentile clipping and genuine populations PA | +| `plot_hdbscan_feature_heatmap` | cluster means/labels -> intercluster variance rank -> `(fig,ax)` | analytic rank b,a,e + counts/values | AP representation; fixedTop30 prose, fixedcolor clipping PA | +| `plot_hdbscan_feature_profiles` | means/labels/n_show -> populous clusters/top5 -> `(fig,axes)` | signs/ranking/counts | AP nominal2;1 and unused panels red, fixedrange clipping PA | +| `plot_xgboost_umap` | Z/pred/confidence/clusters -> three layers -> `(fig,axes)` | exact prediction/scalar/cluster pairing, None | AP nominal; genuineones misdeclared unavailable red; calibration NA | +| `plot_fg_confusion` | Z/pred -> F/G overlays -> `(fig,ax)` or `(None,None)` | <10 sentinel; F3/G8 exact subsets/counts | AP predicted populations; **not** confusion matrix or uncertainty proof | +| `plot_trustworthiness` | X/Z_u/Z_t/k -> real sklearn/seeded subset -> `(fig,ax)` | independent ranks, identity/permutation, admissible k | AP computation; fixed.75 lower bound hides values red; k0/negative PA | +| `plot_latent_zoomed` | Z/y/meta -> percentile window/panels -> `(fig,axes)` | exact paired physical/class arrays | AP nominal; no-physical scalar axes red; tails/NaN boundary PA | +| `plot_latent_kde` | STAR latent+params -> scipy KDE/grid/contours -> `(fig,axes)` | actual STAR/color pairing/reproducibility; analytic+real red masses | AP tested inputs/defect; no-star/small/singular/allmissing boundary PA | +| `plot_ae_recon_by_spectral_type` | X/R/types/features -> type means -> `(fig,axes)` or `(None,None)` | aligned F10/G12 manual means; red deleted middle row | AP nominal; positional truncation defect, external IDs PA | +| `plot_ae_error_by_family` | X/R/names/taxonomy -> feature then family stats -> `(fig,axes)` | means/SD/manual global weighting/errorbar endpoints | AP valid supplied taxonomy; fallback TiO #65 PA | +| `plot_ae_error_distribution_logscale` | MSE/y -> linear/log density hist -> `(fig,axes)` | nominal areas/medians; red tiny positive MSEs | AP nominal; zero/negative/Inf/NaN and truncation PA | +| `plot_synthesis_grid` | distinct PCA/AE/optionalUMAP -> method x scalar panels -> **fig only** | exact per-method/class/physical association | AP nominal; absent/allmissing panels/provenance PA | + +## Consumers and prior findings + +NB01 passes actual PCA variance/loadings/correlation/reconstruction tables, +including raw-spectral PCA and wavelength grid. NB02 passes ordered stability +reports, HDBSCAN normal/presentation attributes, profile means and bridge arrays. +NB03 passes AE history/latent/reconstructed standardized features, inferred +spectral types, summary/comparison frames and previous PCA/UMAP embeddings. +`run_reporter` inventories figure paths; it does not validate pixels or scientific +ownership (#95/#100). No direct production call from app/tools visualizer was +found. Notebook calls are read statically, never executed as complete workflows. + +Known boundaries: #50 joins, #73 profile filtering, #88 bridge filtering each +precede this visualizer; none guarantees identity for an arbitrary caller. +#65 spectral taxonomy also affects fallback family regexes; no duplicate issue +is needed. #78 noise/population interpretation, #84 training loss aggregation, +#85 interpolation physical claims, #89 preprocessing and #90 probability +definition remain open. M2.8 tests do not turn these into approved policy. + +## Checkpoint + +Initial dedicated suite53PASS (Windows/Python3.11.9, matplotlib3.11.2, +numpy2.4.6, pandas3.1.1, scipy1.17.1, sklearn1.9.1), with real Agg rendering. +Final mutation, archive, issue and validation ledgers follow after execution. +Initial test-fixture import ordering and a tied intercluster variance fixture +were corrected before this checkpoint; no production change. Larger KDE +integration domain corrects an early audit-oracle tail omission, not the +production density thresholds. Historical initial JUnit remains under ignored +test-results; final ledgers distinguish effective hashes from active parent HEAD. + +NA: astrophysical validation, real catalog/FITS/model/runs, train/test leakage, +calibration, genuine Gaia source identity, actual UMAP/t-SNE/AE refitting here, +GPU/W&B/network, visual publication review, cross-version image/PDF agreement, +all filesystem failures, notebook execution and line coverage. No claim of +historical figure corruption without its actual run artifact. diff --git a/audit/check_m28_boundaries.py b/audit/check_m28_boundaries.py new file mode 100644 index 0000000..1072b98 --- /dev/null +++ b/audit/check_m28_boundaries.py @@ -0,0 +1,235 @@ +"""Observe unsupported/degenerate visualization boundaries without freezing policy.""" + +import ast +import hashlib +import importlib.util +import json +import os +from pathlib import Path +import sys +import traceback +import types +import warnings + +os.environ["MPLBACKEND"] = "Agg" +import matplotlib +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +ROOT = Path(__file__).resolve().parents[1] + + +def load(name): + path = ROOT / f"src/dimred/{name}.py" + spec = importlib.util.spec_from_file_location(f"dimred.{name}", path) + module = importlib.util.module_from_spec(spec) + sys.modules[f"dimred.{name}"] = module + spec.loader.exec_module(module) + return module + + +def main(): + source = ROOT / "src/dimred/dimred_visualizer.py" + package = types.ModuleType("dimred") + package.__path__ = [str(source.parent)] + sys.modules["dimred"] = package + module = load("dimred_visualizer") + viz = module.DimRedVisualizer(dpi=25) + methods = next( + n + for n in ast.parse(source.read_text(encoding="utf-8")).body + if isinstance(n, ast.ClassDef) + ) + inventory = [ + { + "name": n.name, + "line": n.lineno, + "signature": ast.unparse(n.args), + "returns": [ + ast.unparse(r.value) if r.value is not None else "None" + for r in ast.walk(n) + if isinstance(r, ast.Return) + ], + } + for n in methods.body + if isinstance(n, ast.FunctionDef) + ] + Z = np.random.default_rng(1729).normal(size=(12, 2)) + y = np.array(["STAR"] * 12) + meta = pd.DataFrame( + { + "teff_gspphot": np.linspace(3000, 8000, 12), + "logg_gspphot": np.linspace(1, 5, 12), + } + ) + jobs = [] + + def add(label, function): + jobs.append((label, function)) + + for label, points, labels, frame in [ + ("no_stars", Z, np.array(["QSO"] * 12), meta), + ("singleton", Z[:1], y[:1], meta.iloc[:1]), + ("two_points", Z[:2], y[:2], meta.iloc[:2]), + ("collinear", np.column_stack([np.arange(12.0), np.arange(12.0)]), y, meta), + ( + "NaN_coordinate", + np.where(np.arange(24).reshape(12, 2) == 4, np.nan, Z), + y, + meta, + ), + ( + "Inf_coordinate", + np.where(np.arange(24).reshape(12, 2) == 4, np.inf, Z), + y, + meta, + ), + ("no_physical", Z, y, pd.DataFrame(index=range(12))), + ("all_missing_physical", Z, y, pd.DataFrame({"teff_gspphot": [np.nan] * 12})), + ]: + add( + "KDE_" + label, + lambda points=points, labels=labels, frame=frame: viz.plot_latent_kde( + points, labels, frame + ), + ) + for name in [ + "plot_embedding", + "plot_embedding_grid", + "plot_ae_embedding", + "plot_latent_zoomed", + "plot_synthesis_grid", + ]: + + def call(name=name): + missing = pd.DataFrame({"teff_gspphot": [np.nan] * 12}) + return { + "plot_embedding": lambda: viz.plot_embedding( + Z, color_by=np.full(12, np.nan) + ), + "plot_embedding_grid": lambda: viz.plot_embedding_grid(Z, y, missing), + "plot_ae_embedding": lambda: viz.plot_ae_embedding(Z, missing, y), + "plot_latent_zoomed": lambda: viz.plot_latent_zoomed(Z, y, missing), + "plot_synthesis_grid": lambda: viz.plot_synthesis_grid( + Z, y, missing, Z + ), + }[name]() + + add(name + "_all_missing", call) + for label, frame in [ + ("empty", meta.iloc[:0]), + ("all_missing", meta * float("nan")), + ("singleton", meta.iloc[:1]), + ]: + add("HR_" + label, lambda frame=frame: viz.plot_hr_teff_regions(frame)) + for label, errors in [ + ("all_zero", np.zeros(12)), + ("negative", np.arange(12.0) - 2), + ("NaN", np.where(np.arange(12) == 2, np.nan, 0.1 + np.arange(12))), + ("Inf", np.where(np.arange(12) == 2, np.inf, 0.1 + np.arange(12))), + ("tiny_positive", np.geomspace(1e-10, 1e-6, 12)), + ]: + add( + "log_MSE_" + label, + lambda errors=errors: viz.plot_ae_error_distribution_logscale(errors, y), + ) + for n in [0, -1, 20]: + add( + f"reconstruction_n{n}", + lambda n=n: viz.plot_ae_reconstruction(Z, Z + 1, ["a", "b"], n_samples=n), + ) + for k in [0, -1, 1, 6, 12]: + add(f"trust_k{k}", lambda k=k: viz.plot_trustworthiness(Z, Z, Z, k_values=[k])) + for count in [0, 1, 7]: + frame = pd.DataFrame( + { + "seed": np.arange(count), + "procrustes_distance": np.linspace(0, 0.6, count), + "method": ["UMAP"] * count, + } + ) + add(f"stability_rows{count}", lambda frame=frame: viz.plot_stability(frame)) + for label, history in [ + ("empty", {"train_loss": [], "val_loss": []}), + ("mismatched", {"train_loss": [1, 2], "val_loss": [1]}), + ("NaN", {"train_loss": [1, 2], "val_loss": [np.nan, 1]}), + ]: + add( + "history_" + label, + lambda history=history: viz.plot_training_history(history), + ) + add("embedding_length", lambda: viz.plot_embedding(Z, y=y[:5])) + add( + "family_zero_weights", + lambda: viz.plot_loadings_family_bar( + pd.DataFrame({"family": ["A"], "weight": [0.0]}), + pd.DataFrame({"family": ["B"], "weight": [0.0]}), + {}, + ), + ) + add( + "family_donut_zero", + lambda: viz.plot_loadings_family_donut( + pd.DataFrame({"family": ["A"], "weight": [0.0]}), + pd.DataFrame({"family": ["B"], "weight": [0.0]}), + {}, + ), + ) + observations = [] + for label, function in jobs: + with warnings.catch_warnings(record=True) as captured: + warnings.simplefilter("always") + try: + result = function() + outcome = { + "result_type": type(result).__name__, + "figures": [ + { + "axes": [ + { + "title": a.get_title(), + "xlim": list(a.get_xlim()), + "ylim": list(a.get_ylim()), + "lines": len(a.lines), + "collections": len(a.collections), + } + for a in plt.figure(i).axes + ] + } + for i in plt.get_fignums() + ], + } + except Exception as exc: + outcome = { + "exception": type(exc).__name__, + "message": str(exc), + "traceback": traceback.format_exc(), + } + observations.append( + { + "case": label, + **outcome, + "warnings": [str(w.message) for w in captured], + } + ) + plt.close("all") + result = { + "python": sys.version, + "source_sha256": hashlib.sha256(source.read_bytes()).hexdigest(), + "backend": matplotlib.get_backend(), + "inventory": inventory, + "observations": observations, + } + destination = ROOT / "audit/m28_boundary_results.json" + destination.write_text( + json.dumps(result, indent=2, ensure_ascii=True, default=float) + "\n", + encoding="utf-8", + ) + print( + f"{len(inventory)} methods; {len(observations)} boundary observations; {destination}" + ) + + +if __name__ == "__main__": + main() diff --git a/audit/check_m28_evidence.py b/audit/check_m28_evidence.py new file mode 100644 index 0000000..5afdd8d --- /dev/null +++ b/audit/check_m28_evidence.py @@ -0,0 +1,430 @@ +"""Replay M2.8 semantic mutants and admissible controls in disposable trees. + +Only reached source edits and assertion failures with unchanged collection are +KILLED. Environment/import/setup failures are INCONCLUSIVE. Exact candidate +patches, traces, pytest output, JUnit and effective LF hashes are retained. +""" + +import argparse +import ast +import difflib +import hashlib +import json +import os +from pathlib import Path +import shutil +import subprocess +import sys +import tempfile +import xml.etree.ElementTree as ET + +ROOT = Path(__file__).resolve().parents[1] +SOURCE = "src/dimred/dimred_visualizer.py" +GREEN = "tests/test_dimred_visualizer.py" +PROOF = "tests/proofs_dimred_visualizer.py" + +# name, method, unique old site, replacement, pytest selection +MUTANTS = [ + ( + "M01_color_row_roll", + "plot_embedding", + "mask = y == cls", + "mask = np.roll(y == cls, 1)", + "embedding_exact_observation", + ), + ( + "M02_variance_units", + "plot_variance_explained", + "ratio * 100", + "ratio", + "real_pca_variance", + ), + ( + "M03_best_is_max", + "plot_training_history", + "np.argmin(val_loss)", + "np.argmax(val_loss)", + "training_history_minimum", + ), + ( + "M04_family_median", + "plot_ae_error_by_family", + '.agg(["mean", "std", "count"])', + '.agg(["median", "std", "count"]).rename(columns={"median": "mean"})', + "error_family_mean", + ), + ( + "M05_ae_as_pca", + "plot_ae_vs_pca", + 'row["mse_mean"], color=', + 'pca_df["mse_mean"].iloc[0], color=', + "ae_pca_comparison", + ), + ( + "M06_identity_reconstruction", + "plot_ae_reconstruction", + "recon = X_recon[si]", + "recon = X[si]", + "reconstruction_drawn_rows", + ), + ( + "M07_hr_color_roll", + "plot_hr_diagram_embedding", + "c=z_coord[valid]", + "c=np.roll(z_coord[valid], 1)", + "hr_finite_triplets", + ), + ( + "M08_cluster_colors", + "plot_hdbscan_clusters", + "c=[color_map[cid]]", + "c=[color_map[cluster_ids[-1]]]", + "real_analyzer_state", + ), + ( + "M09_tsne_as_umap", + "plot_trustworthiness", + "X_sub, Zt_sub, n_neighbors=k", + "X_sub, Zu_sub, n_neighbors=k", + "real_sklearn_trustworthiness", + ), + ( + "M10_confidence_constant", + "plot_xgboost_umap", + "c=confidence", + "c=np.ones(len(confidence))", + "xgboost_classes_confidence", + ), + ( + "M11_synthesis_ae_as_pca", + "plot_synthesis_grid", + '("Autoencodeur", Z_ae,', + '("Autoencodeur", scores_pca,', + "synthesis_preserves", + ), + ( + "M12_stability_median", + "plot_stability", + "dists[1:].mean()", + "np.median(dists[1:])", + "stability_producer", + ), + ( + "M13_profile_sign_erased", + "plot_hdbscan_feature_profiles", + "vals = profile[top5].values", + "vals = np.abs(profile[top5].values)", + "profiles_signed_top", + ), + ( + "M14_density_wrong_population", + "plot_ae_error_distribution", + "density=True", + "density=False", + "histogram_densities", + ), + ( + "M15_kde_wrong_population", + "plot_latent_kde", + 'star_mask = y == "STAR"', + "star_mask = np.ones(len(y), dtype=bool)", + "real_kde_reproducible", + ), + ( + "M16_export_blank_figure", + "_save", + 'fig.savefig(path, bbox_inches="tight", dpi=self.dpi)', + 'plt.figure().savefig(path, bbox_inches="tight", dpi=self.dpi)', + "real_export_readable", + ), +] + +CONTROLS = [ + ( + "C01_equivalent_percent", + "plot_variance_explained", + "ratio * 100", + "100 * ratio", + "real_pca_variance", + ), + ( + "C02_alternative_export", + "_save", + 'fig.savefig(path, bbox_inches="tight", dpi=self.dpi)', + 'fig.canvas.print_figure(path, bbox_inches="tight", dpi=self.dpi)', + "real_export_readable", + ), + ( + "C03_alternative_palette", + "plot_loadings_bar", + '"#DD8452" if v < 0 else "#4C72B0"', + '"#CC5500" if v < 0 else "#0055CC"', + "signed_loadings", + ), + ( + "C04_explicit_alignment_refusal", + "plot_ae_recon_by_spectral_type", + "RECON_FEATURES = [", + 'if not (len(X) == len(X_recon) == len(spectral_types)):\n raise RuntimeError("Observation alignment: incompatible lengths")\n RECON_FEATURES = [', + "reconstruction_cardinality", + ), + ( + "C05_gravity_units", + "plot_hr_teff_regions", + "G_HI - T_PAD * 2", + "G_HI - G_PAD * 2", + "hr_region_vertices", + ), + ( + "C06_count_omitted", + "plot_hr_teff_regions", + "43 019 étoiles", + "population fournie", + "hr_population_title", + ), + ( + "C07_small_errors_retained", + "plot_ae_error_distribution_logscale", + "max(vals.min(), 1e-4)", + "max(vals.min(), np.finfo(float).tiny)", + "log_histogram_keeps", + ), +] + +FALSE_REMEDIES = [ + ( + "F01_always_refuse_alignment", + "plot_ae_recon_by_spectral_type", + "RECON_FEATURES = [", + 'raise RuntimeError("Observation alignment unavailable")\n RECON_FEATURES = [', + "reconstruction_cardinality or spectral_type_means", + ), + ( + "F02_empty_hr", + "plot_hr_teff_regions", + "for region in REGIONS:", + "REGIONS = []\n for region in REGIONS:", + "hr_region_vertices", + ), +] + +PLUGIN = """import json, os, sys +seen=set() +def trace(frame, event, arg): + if frame.f_code.co_filename.replace("\\\\", "/").endswith("src/dimred/dimred_visualizer.py"): + if event == "line": seen.add(frame.f_lineno) + return trace + return None +def pytest_sessionstart(session): sys.settrace(trace) +def pytest_sessionfinish(session, exitstatus): + sys.settrace(None) + with open(os.environ["M28_TRACE"], "w") as f: json.dump(sorted(seen), f) +""" + + +def digest(path): + return hashlib.sha256( + path.read_text(encoding="utf-8").replace("\r\n", "\n").encode() + ).hexdigest() + + +def edit(source, method, old, new): + tree = ast.parse(source) + cls = next(n for n in tree.body if isinstance(n, ast.ClassDef)) + node = next( + n for n in cls.body if isinstance(n, ast.FunctionDef) and n.name == method + ) + lines = source.splitlines(keepends=True) + body = "".join(lines[node.lineno - 1 : node.end_lineno]) + if body.count(old) != 1: + raise ValueError( + f"{method}: expected one edit site, got {body.count(old)}: {old}" + ) + changed_line = node.lineno + body[: body.index(old)].count("\n") + statements = [ + n + for n in ast.walk(node) + if isinstance(n, ast.stmt) and n.lineno <= changed_line <= n.end_lineno + ] + statement_line = min(statements, key=lambda n: n.end_lineno - n.lineno).lineno + changed = ( + "".join(lines[: node.lineno - 1]) + + body.replace(old, new) + + "".join(lines[node.end_lineno :]) + ) + ast.parse(changed) + return changed, { + statement_line, + *range(changed_line, changed_line + new.count("\n") + 1), + } + + +def run(tree, tests, selection, reverse=False): + command = [ + sys.executable, + "-m", + "pytest", + "-q", + *tests, + "-p", + "m28_trace", + "-k", + selection, + "--tb=short", + "--junitxml=result.xml", + ] + if reverse: + with (tree / "m28_trace.py").open("a", encoding="utf-8") as stream: + stream.write( + "\ndef pytest_collection_modifyitems(items): items.reverse()\n" + ) + env = dict( + os.environ, + MPLBACKEND="Agg", + PYTHONHASHSEED="7" if reverse else "0", + M28_TRACE=str(tree / "trace.json"), + PYTHONPATH=str(tree) + os.pathsep + str(tree / "src"), + PYTHONIOENCODING="utf-8", + ) + result = subprocess.run( + command, + cwd=tree, + env=env, + text=True, + encoding="utf-8", + errors="replace", + capture_output=True, + timeout=180, + ) + cases = [] + if (tree / "result.xml").exists(): + for case in ET.parse(tree / "result.xml").iter("testcase"): + child = next(iter(case), None) + cases.append( + { + "id": case.attrib["classname"] + "::" + case.attrib["name"], + "status": "PASS" if child is None else child.tag.upper(), + "message": "" if child is None else (child.text or ""), + } + ) + seen = ( + json.loads((tree / "trace.json").read_text()) + if (tree / "trace.json").exists() + else [] + ) + return { + "command": command, + "returncode": result.returncode, + "cases": cases, + "executed_lines": seen, + "stdout": result.stdout, + "stderr": result.stderr, + } + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument( + "--mode", choices=["mutations", "proofs", "reverse"], default="mutations" + ) + parser.add_argument("--output", default="test-results/m28-replay.json") + parser.add_argument("--proofs-ref") + args = parser.parse_args() + protected = [SOURCE, GREEN, "tests/conftest.py"] + before = {p: digest(ROOT / p) for p in protected} + source = (ROOT / SOURCE).read_text(encoding="utf-8") + payload = { + "active_head": subprocess.check_output( + ["git", "rev-parse", "HEAD"], cwd=ROOT, text=True + ).strip(), + "python": sys.version, + "tested_lf_sha256": before, + "mode": args.mode, + "runs": [], + } + plans = MUTANTS if args.mode == "mutations" else [] + plans += CONTROLS + FALSE_REMEDIES if args.mode == "proofs" else [] + with tempfile.TemporaryDirectory(prefix="m28-synthetic-") as directory: + tree = Path(directory) + (tree / "tests").mkdir() + shutil.copytree( + ROOT / "src/dimred", + tree / "src/dimred", + ignore=shutil.ignore_patterns("__pycache__"), + ) + for p in [GREEN, "tests/conftest.py", "pyproject.toml"]: + shutil.copy2(ROOT / p, tree / p) + if args.proofs_ref: + for p in [PROOF, GREEN, "tests/conftest.py"]: + content = subprocess.check_output( + ["git", "show", f"{args.proofs_ref}:{p}"], cwd=ROOT + ) + (tree / p).write_bytes(content) + payload["proofs_ref"] = args.proofs_ref + elif (ROOT / PROOF).exists(): + shutil.copy2(ROOT / PROOF, tree / PROOF) + (tree / "m28_trace.py").write_text(PLUGIN, encoding="utf-8") + tests = [GREEN] if args.mode != "proofs" else [PROOF] + baseline = run(tree, tests, "", reverse=args.mode == "reverse") + payload["baseline"] = baseline + for name, method, old, new, selection in plans: + tests = [GREEN, PROOF] if args.mode == "proofs" else [GREEN] + (tree / SOURCE).write_text(source, encoding="utf-8") + original = run(tree, tests, selection) + changed, sites = edit(source, method, old, new) + (tree / SOURCE).write_text(changed, encoding="utf-8") + actual = run(tree, tests, selection) + same = sorted(c["id"] for c in original["cases"]) == sorted( + c["id"] for c in actual["cases"] + ) + failures = [c for c in actual["cases"] if c["status"] == "FAILURE"] + assertions = failures and all( + "AssertionError" in c["message"] or "E assert" in c["message"] + for c in failures + ) + reached = bool(sites.intersection(actual["executed_lines"])) + clean = actual["cases"] and all( + c["status"] in ["PASS", "FAILURE"] for c in actual["cases"] + ) + classification = "INCONCLUSIVE" + if same and reached and clean: + classification = ( + "KILLED" + if assertions + else ( + "PASS" if actual["returncode"] == 0 else "NON_ASSERTION_FAILURE" + ) + ) + payload["runs"].append( + { + "name": name, + "method": method, + "selection": selection, + "changed_lines": sorted(sites), + "reached": reached, + "same_collection": same, + "classification": classification, + "candidate_lf_sha256": hashlib.sha256(changed.encode()).hexdigest(), + "patch": "".join( + difflib.unified_diff( + source.splitlines(True), changed.splitlines(True) + ) + ), + "original": original, + "candidate": actual, + } + ) + print(name, classification, flush=True) + payload["protected_unchanged"] = before == { + p: digest(ROOT / p) for p in protected + } + output = ROOT / args.output + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text( + json.dumps(payload, indent=2, ensure_ascii=True) + "\n", encoding="utf-8" + ) + print(output) + + +if __name__ == "__main__": + main() diff --git a/tests/conftest.py b/tests/conftest.py index 8666209..4a05d88 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -14,6 +14,68 @@ import pytest +@pytest.fixture +def visualizer_case(monkeypatch): + """Execute real visualizer/bridge modules with isolated Matplotlib state. + + The optional package facade is bypassed (#21); local imports still resolve + to actual module bytes. No backend estimator or plotting method is mocked. + """ + import matplotlib + + matplotlib.use("Agg", force=True) + import matplotlib.pyplot as plt + + root = Path(__file__).resolve().parents[1] + package = types.ModuleType("dimred") + package.__path__ = [str(root / "src/dimred")] + previous_figures = set(plt.get_fignums()) + with matplotlib.rc_context(): + monkeypatch.setitem(sys.modules, "dimred", package) + modules = {} + for name in ["dimred_visualizer", "xgboost_bridge"]: + spec = importlib.util.spec_from_file_location( + f"dimred.{name}", root / f"src/dimred/{name}.py" + ) + module = importlib.util.module_from_spec(spec) + monkeypatch.setitem(sys.modules, f"dimred.{name}", module) + spec.loader.exec_module(module) + modules[name] = module + Z = np.array( + [ + [11.0, 2.0], + [3.0, 17.0], + [23.0, 5.0], + [7.0, 31.0], + [41.0, 13.0], + [19.0, 43.0], + ] + ) + y = np.array(["STAR", "QSO", "STAR", "GALAXY", "STAR", "QSO"]) + meta = pd.DataFrame( + { + "obsid": [91, 7, 300, 18, 2, 700], + "teff_gspphot": [3100.0, 7400.0, 5200.0, 6900.0, 4300.0, 8100.0], + "logg_gspphot": [4.8, 1.2, 4.1, 2.3, 3.7, 0.6], + "mh_gspphot": [-1.7, 0.3, -0.4, -2.2, 0.1, -0.9], + }, + index=[8, 3, 9, 1, 0, 6], + ) + module = modules["dimred_visualizer"] + try: + yield types.SimpleNamespace( + module=module, + viz=module.DimRedVisualizer(dpi=50), + plt=plt, + Z=Z, + y=y, + meta=meta, + ) + finally: + for number in set(plt.get_fignums()) - previous_figures: + plt.close(number) + + @pytest.fixture def reporter_module(): """Load the actual reporter independently of the optional facade (#21).""" diff --git a/tests/proofs_dimred_visualizer.py b/tests/proofs_dimred_visualizer.py new file mode 100644 index 0000000..60f2ec3 --- /dev/null +++ b/tests/proofs_dimred_visualizer.py @@ -0,0 +1,314 @@ +"""Explicit M2.8 counterexamples; archived and removed from the green head. + +No xfail and no production edits. Refusal, masking and unavailable outputs are +alternatives on invalid data; valid positive cases are in the green suite. +""" + +import re +from types import SimpleNamespace + +import numpy as np +from numpy.testing import assert_allclose +import pandas as pd +import pytest + + +def call_or_domain_refusal(call, domain): + """Permit relevant explicit refusal, never accept incidental backend errors.""" + try: + return call() + except (ValueError, RuntimeError) as exc: + message = str(exc).lower() + assert any(word in message for word in domain), message + assert not any( + word in message + for word in [ + "concatenate", + "percentile", + "0 columns", + "singular data covariance", + ] + ), message + return None + except Exception as exc: + pytest.fail( + f"Incidental {type(exc).__name__} instead of explicit domain handling: {exc}" + ) + + +def gaussian_population(n=250): + rng = np.random.default_rng(1729) + Z = rng.normal(size=(n, 2)) + meta = pd.DataFrame({"teff_gspphot": np.arange(n, dtype=float) + 3500}) + return Z, np.array(["STAR"] * n), meta + + +@pytest.mark.parametrize( + "analytic", [False, True], ids=["real_scipy", "analytic_normal"] +) +def test_kde_labeled_regions_enclose_probability_mass( + visualizer_case, monkeypatch, analytic +): + c = visualizer_case + Z, y, meta = gaussian_population() + observed = [] + from matplotlib.axes import Axes + import scipy.stats + + original = Axes.contour + real_kde = scipy.stats.gaussian_kde + fitted = [] + + def fit(data, **kwargs): + estimator = real_kde(data, **kwargs) + fitted.append(estimator) + return estimator + + def contour(ax, XX, YY, density, *args, **kwargs): + result = original(ax, XX, YY, density, *args, **kwargs) + observed.append((XX.copy(), YY.copy(), density.copy(), result)) + return result + + monkeypatch.setattr(Axes, "contour", contour) + if analytic: + + class StandardNormal: + def __init__(self, data, **kwargs): + pass + + def __call__(self, grid): + return np.exp(-np.sum(grid**2, axis=0) / 2) / (2 * np.pi) + + monkeypatch.setattr(scipy.stats, "gaussian_kde", StandardNormal) + else: + monkeypatch.setattr(scipy.stats, "gaussian_kde", fit) + c.viz.plot_latent_kde(Z, y, meta) + assert observed, "Valid nominal KDE must contain informative contours" + XX, YY, density, cs = observed[0] + # Quadrature over actual plotted grid, with endpoint half-cell weights. + weights = np.ones(density.shape) + weights[[0, -1], :] *= 0.5 + weights[:, [0, -1]] *= 0.5 + cell = (XX[0, 1] - XX[0, 0]) * (YY[1, 0] - YY[0, 0]) + assert 0.98 < np.sum(weights * density) * cell < 1.01 + # The production display grid excludes tails (~1.6% in this fixture). + # Integrate on an independent larger domain before comparing global mass. + grid = np.linspace(-8, 8, 401) + gx, gy = np.meshgrid(grid, grid) + positions = np.vstack([gx.ravel(), gy.ravel()]) + broad = ( + np.exp(-np.sum(positions**2, axis=0) / 2) / (2 * np.pi) + if analytic + else fitted[0](positions) + ).reshape(gx.shape) + area = (grid[1] - grid[0]) ** 2 + assert_allclose(broad.sum() * area, 1, atol=1e-7) + masses = [] + for level in cs.levels: + mass = broad[broad >= level].sum() * area + if analytic: + assert_allclose(mass, 1 - 2 * np.pi * level, atol=0.006) + masses.append(mass) + # Level order low->high corresponds to enclosed masses high->low. + assert_allclose( + masses, + [0.99, 0.95, 0.68], + atol=0.006, + err_msg="Density-height percentiles are not probability masses", + ) + + +def test_hr_region_vertices_have_gravity_units_and_stay_in_domain(visualizer_case): + c = visualizer_case + _, ax = c.viz.plot_hr_teff_regions(c.meta) + low, high = sorted(ax.get_ylim()) + assert ax.patches, "Valid HR regional figure must contain informative regions" + vertices = np.vstack([p.get_xy() for p in ax.patches]) + assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices + + +@pytest.mark.parametrize("n", [6, 9]) +def test_hr_population_title_is_counted_or_omitted(visualizer_case, n): + c = visualizer_case + meta = pd.concat([c.meta, c.meta.iloc[:3]], ignore_index=True).iloc[:n] + _, ax = c.viz.plot_hr_teff_regions(meta) + title = ax.get_title().replace(" ", "").replace("\u202f", "") + counts = re.findall(r"(\d+)étoiles", title) + assert not counts or all(int(v) == n for v in counts), title + + +def test_reconstruction_cardinality_cannot_reassign_spectral_classes(visualizer_case): + c = visualizer_case + # Original row 4 was removed upstream; truncating assigns row 5 to G, + # although its actual class is F. Twelve retained F rows satisfy the >=10 + # display policy. Missing IDs cannot be reconstructed by this API. + types = np.array(["F"] * 4 + ["G"] * 4 + ["F"] * 9) + X = np.arange(17.0)[:, None] * 10 + keep = np.delete(np.arange(17), 4) + expected_F = X[keep][types[keep] == "F"].mean() + result = call_or_domain_refusal( + lambda: c.viz.plot_ae_recon_by_spectral_type( + X[keep], X[keep] + 2, types, ["feature_Hα_eq_width"] + ), + ["align", "length", "taille", "cardinal", "observ", "row"], + ) + if result is not None and result[0] is not None: + _, axes = result + assert_allclose( + axes[0].patches[0].get_height(), + expected_F, + err_msg="Truncation is not observation identity", + ) + + +@pytest.mark.parametrize("name", ["plot_hdbscan_clusters", "plot_hdbscan_hr"]) +def test_cluster_colorbar_matches_actual_cluster_rgb(visualizer_case, name): + c = visualizer_case + colors = {-1: (0.8, 0.8, 0.8, 1), 2: (1, 0, 0, 1), 7: (0, 0, 1, 1)} + hdb = SimpleNamespace( + labels_=np.array([2, -1, 7, 2, 7, 2]), + cluster_ids_=[2, 7], + color_map_=colors, + n_clusters_=2, + n_noise_=1, + ) + fig, axes = getattr(c.viz, name)( + c.Z, hdb, c.y if name.endswith("clusters") else c.meta + ) + cb = next( + a._colorbar for a in fig.axes if getattr(a, "_colorbar", None) is not None + ) + for collection, cid in zip(axes[0].collections[1:], [2, 7]): + assert_allclose( + cb.mappable.to_rgba(cid)[:3], + collection.get_facecolors()[0, :3], + err_msg=f"Colorbar does not encode C{cid}", + ) + + +def test_actual_unit_confidence_is_not_claimed_unavailable(visualizer_case): + c = visualizer_case + _, axes = c.viz.plot_xgboost_umap( + c.Z, np.array(["F"] * 6), np.ones(6), np.array([0] * 6), {0: "blue"} + ) + # Supplied ones are compatible with genuine probability=1; no availability + # flag enters this API. Numeric values alone cannot establish absence. + assert not any("non disponible" in t.get_text() for t in axes[1].texts) + + +@pytest.mark.parametrize("name", ["plot_ae_embedding", "plot_latent_zoomed"]) +def test_no_physical_columns_still_supports_classes_or_explicit_refusal( + visualizer_case, name +): + c = visualizer_case + meta = c.meta[["obsid"]] + + def call(): + if name == "plot_ae_embedding": + return c.viz.plot_ae_embedding(c.Z, meta, c.y) + return c.viz.plot_latent_zoomed(c.Z, c.y, meta) + + result = call_or_domain_refusal( + call, ["physical", "param", "gaia", "column", "colonn"] + ) + if result is not None and result[0] is not None: + _, axes = result + ax = np.atleast_1d(axes)[0] + assert sum(len(sc.get_offsets()) for sc in ax.collections) == 6 + + +@pytest.mark.parametrize("n_show", [1, 0, 4]) +def test_cluster_profiles_unavailable_slots_not_presented_as_data( + visualizer_case, n_show +): + c = visualizer_case + means = pd.DataFrame( + [[1.0, 2, 3, 4, 5], [-1, -2, -3, -4, -5]], index=[2, 7], columns=list("abcde") + ) + result = call_or_domain_refusal( + lambda: c.viz.plot_hdbscan_feature_profiles( + means, np.array([2, 7, 7]), n_show=n_show + ), + ["cluster", "n_show", "positive", "count", "nombre"], + ) + if result is not None and result[0] is not None: + _, axes = result + for ax in np.asarray(axes).ravel(): + assert ( + ax.patches or not ax.axison or not ax.get_visible() + ), "Empty slot looks like a measurement panel" + + +def test_more_reconstructions_than_rows_has_no_empty_measurement_axes(visualizer_case): + c = visualizer_case + _, axes = c.viz.plot_ae_reconstruction( + c.Z[:2], c.Z[:2] + 1, ["a", "b"], n_samples=4 + ) + for ax in axes: + assert ( + ax.lines or not ax.axison or not ax.get_visible() + ), "Unpopulated reconstruction panel" + + +def test_truncated_variance_annotation_does_not_attribute_wrong_mass(visualizer_case): + c = visualizer_case + pca = SimpleNamespace( + explained_variance_ratio=np.array([0.6, 0.25, 0.15]), + n_components_for_variance=lambda threshold: 3, + ) + _, axes = c.viz.plot_variance_explained(pca, threshold=0.95, max_pcs=2) + annotations = " ".join(t.get_text() for t in axes[1].texts) + assert "3 PCs\n→ 85.0%" not in annotations, annotations + + +def test_log_histogram_keeps_small_positive_errors(visualizer_case): + c = visualizer_case + errors = np.array([1e-8, 1e-7, 1e-6, 0.01, 0.1, 1.0]) + _, axes = c.viz.plot_ae_error_distribution_logscale(errors, np.array(["STAR"] * 6)) + bars = axes[1].containers[0] + assert ( + min(p.get_x() for p in bars) <= errors.min() + ), "Positive MSEs dropped below arbitrary 1e-4 floor" + + +def test_histogram_does_not_silently_omit_fifth_class(visualizer_case): + c = visualizer_case + labels = np.array(["A", "B", "C", "D", "E", "E"]) + _, ax = c.viz.plot_ae_error_distribution(np.array([1.0, 2, 3, 4, 5, 9]), labels) + represented = {label.split(" ")[0] for label in ax.get_legend_handles_labels()[1]} + assert represented == set(labels), "Palette length silently drops classes" + + +@pytest.mark.parametrize("name", ["plot_training_history", "plot_ae_vs_pca"]) +def test_default_output_directory_applies_to_direct_exports( + visualizer_case, tmp_path, name +): + c = visualizer_case + viz = c.module.DimRedVisualizer(output_dir=tmp_path, dpi=30) + if name == "plot_training_history": + result = viz.plot_training_history( + {"train_loss": [2.0, 1], "val_loss": [3.0, 2]} + ) + else: + result = viz.plot_ae_vs_pca( + pd.DataFrame( + { + "method": ["PCA", "AE"], + "n_components": [1, 2], + "mse_mean": [0.5, 0.3], + } + ) + ) + assert result[0] is not None + assert list(tmp_path.glob("*.png")), "Configured output_dir ignored" + + +def test_trustworthiness_axis_contains_computed_values(visualizer_case): + c = visualizer_case + rng = np.random.default_rng(1729) + X = rng.normal(size=(12, 2)) + bad = X[[7, 0, 9, 4, 1, 10, 2, 11, 3, 6, 5, 8]] + _, ax = c.viz.plot_trustworthiness(X, X, bad, k_values=[1, 2, 3]) + lo, hi = sorted(ax.get_ylim()) + vals = np.concatenate([line.get_ydata() for line in ax.lines[:2]]) + assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi)) diff --git a/tests/test_dimred_visualizer.py b/tests/test_dimred_visualizer.py new file mode 100644 index 0000000..67caf5d --- /dev/null +++ b/tests/test_dimred_visualizer.py @@ -0,0 +1,706 @@ +"""M2.8: numeric artists, observation pairing and real synthetic exports. + +Tolerances are floating point/printed-decimal tolerances, never astronomical +uncertainties. Scientific defects are executed separately in the red archive. +""" + +from math import fsum, sqrt +from types import SimpleNamespace + +import numpy as np +from numpy.testing import assert_allclose, assert_array_equal +import pandas as pd +import pytest + + +def offsets(collection): + return np.asarray(collection.get_offsets()) + + +def heights(ax): + return np.array([p.get_height() for p in ax.patches]) + + +def widths(ax): + return np.array([p.get_width() for p in ax.patches]) + + +def text(ax): + return " ".join(t.get_text() for t in ax.texts) + + +@pytest.mark.parametrize("mode", ["classes", "continuous", "plain"]) +def test_embedding_exact_observation_associations(visualizer_case, mode): + c = visualizer_case + before = c.Z.copy() + kwargs = {} + if mode == "classes": + kwargs["y"] = c.y + if mode == "continuous": + values = np.array([8.0, np.nan, 3.0, 21.0, np.inf, 1.0]) + kwargs.update(color_by=values, color_label="measured scalar") + fig, ax = c.viz.plot_embedding(c.Z, method="t-SNE", **kwargs) + if mode == "classes": + assert set(ax.get_legend_handles_labels()[1]) == set(c.y) + for sc in ax.collections: + cls = sc.get_label() + assert_array_equal(offsets(sc), c.Z[c.y == cls]) + elif mode == "continuous": + assert_array_equal(offsets(ax.collections[0]), c.Z[[1, 4]]) + assert_array_equal(offsets(ax.collections[1]), c.Z[[0, 2, 3, 5]]) + assert_array_equal(ax.collections[1].get_array(), [8, 3, 21, 1]) + # Linear interpolation on sorted [1,3,8,21], at .06 and 2.94. + assert_allclose(ax.collections[1].get_clim(), [1.12, 20.22]) + assert fig.axes[-1].get_ylabel() == "measured scalar" + else: + assert_array_equal(offsets(ax.collections[0]), c.Z) + assert "t-SNE" in ax.get_xlabel() and "t-SNE" in ax.get_ylabel() + assert_array_equal(c.Z, before) + + +@pytest.mark.parametrize("order", [np.arange(6), np.array([4, 0, 5, 2, 1, 3])]) +def test_grid_and_ae_color_pairing_under_coherent_permutation(visualizer_case, order): + c = visualizer_case + Z, y, meta = c.Z[order], c.y[order], c.meta.iloc[order].copy() + meta.iloc[1, meta.columns.get_loc("teff_gspphot")] = np.nan + for name in ["plot_embedding_grid", "plot_ae_embedding", "plot_latent_zoomed"]: + if name == "plot_embedding_grid": + _, axes = getattr(c.viz, name)( + Z, y, meta, params=["teff_gspphot", "absent"] + ) + assert not axes[2].get_visible() + elif name == "plot_ae_embedding": + _, axes = getattr(c.viz, name)(Z, meta, y) + else: + _, axes = getattr(c.viz, name)(Z, y, meta) + for sc in axes[0].collections: + cls = sc.get_label().split(" ")[0] + assert_array_equal(offsets(sc), Z[y == cls]) + colored = [s for s in axes[1].collections if s.get_array() is not None][0] + assert_array_equal(offsets(colored), Z[[0, 2, 3, 4, 5]]) + assert_array_equal(colored.get_array(), meta.teff_gspphot.iloc[[0, 2, 3, 4, 5]]) + assert_array_equal(meta.obsid, c.meta.obsid.iloc[order]) + + +@pytest.mark.parametrize("axis", [0, 1]) +def test_hr_finite_triplets_and_physical_axes(visualizer_case, axis): + c = visualizer_case + meta, Z = c.meta.copy(), c.Z.copy() + meta.iloc[1, 1] = np.nan + meta.iloc[3, 2] = np.inf + Z[4, axis] = np.inf + fig, ax = c.viz.plot_hr_diagram_embedding(meta, Z, component=axis) + expected = [[3100, 4.8], [5200, 4.1], [8100, 0.6]] + assert_array_equal(offsets(ax.collections[0]), expected) + assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis]) + assert ax.xaxis_inverted() and ax.yaxis_inverted() + assert "K" in ax.get_xlabel() and "dex" in ax.get_ylabel() + assert str(axis + 1) in fig.axes[-1].get_ylabel() + + +def test_hr_missing_columns_refused(visualizer_case): + c = visualizer_case + with pytest.raises(ValueError, match="teff|logg|Gaia"): + c.viz.plot_hr_diagram_embedding(pd.DataFrame(), c.Z) + assert c.viz.plot_hr_teff_regions(pd.DataFrame()) == (None, None) + + +def test_real_pca_variance_and_reconstruction_energy(visualizer_case, dimred_pca_class): + c = visualizer_case + X = np.array( + [[3.0, 0, 0], [-3, 0, 0], [0, 2, 0], [0, -2, 0], [0, 0, 1], [0, 0, -1]] + ) + pca = dimred_pca_class(n_components=3, svd_solver="full").fit(X, ["a", "b", "c"]) + _, axes = c.viz.plot_variance_explained(pca, threshold=0.9, max_pcs=3) + assert_allclose(heights(axes[0]), np.array([9, 4, 1]) / 14 * 100) + assert_allclose(axes[1].lines[0].get_ydata(), np.array([9, 13, 14]) / 14 * 100) + assert_allclose(axes[1].lines[1].get_ydata(), [90, 90]) + assert_allclose(axes[1].lines[2].get_xdata(), [2, 2]) + assert "2 PCs" in text(axes[1]) and "92.9%" in text(axes[1]) + df = pca.reconstruction_error_vs_n(X, [1, 2, 3]) + _, ax = c.viz.plot_reconstruction_error(df) + assert_allclose(ax.lines[0].get_xdata(), [1, 2, 3]) + assert_allclose(ax.lines[0].get_ydata(), [5 / 9, 1 / 9, 0], atol=1e-28) + # Per-row squared residuals: [0,0,4/3,4/3,1/3,1/3]. + expected_std = sqrt( + fsum((x - 5 / 9) ** 2 for x in [0, 0, 4 / 3, 4 / 3, 1 / 3, 1 / 3]) / 6 + ) + vertices = ax.collections[0].get_paths()[0].vertices + assert_allclose(vertices[vertices[:, 0] == 1, 1].min(), 5 / 9 - expected_std) + assert ax.get_yscale() == "log" + + +def test_signed_loadings_selection_and_sign_equivariance(visualizer_case): + c = visualizer_case + L = np.array([[0.2, -0.8], [-0.9, 0.1], [0.4, -0.3], [-0.1, 0.7]]) + names = ["a", "b", "c", "d"] + for sign in [1, -1]: + values = L * sign + pca = SimpleNamespace( + loadings_dataframe=lambda: pd.DataFrame(values, index=names) + ) + _, ax = c.viz.plot_loadings_heatmap(pca, n_pcs=2, n_features=3) + assert [t.get_text() for t in ax.get_yticklabels()] == ["b", "a", "d"] + assert_array_equal(ax.images[0].get_array(), values[[1, 0, 3]]) + assert_allclose(ax.images[0].get_clim(), [-0.9, 0.9]) + pca.explained_variance_ratio = [0.64] + pca.top_features_per_pc = lambda **kw: pd.DataFrame( + {"feature": ["b", "a", "c"], "loading": values[[1, 0, 2], 0]} + ) + _, ax = c.viz.plot_loadings_bar(pca, n_top=3) + expected = sorted(zip(values[[1, 0, 2], 0], ["b", "a", "c"])) + assert_allclose(widths(ax), [v for v, _ in expected]) + assert [t.get_text() for t in ax.get_yticklabels()] == [n for _, n in expected] + assert "64.0%" in text(ax) + + +def test_family_weights_bar_and_donut_angles(visualizer_case): + c = visualizer_case + first = pd.DataFrame({"family": ["A", "B"], "weight": [0.8, 0.2]}) + second = pd.DataFrame({"family": ["B", "C"], "weight": [0.3, 0.7]}) + colors = {"A": "red", "B": "blue", "C": "green"} + _, ax = c.viz.plot_loadings_family_bar(first, second, colors) + assert [t.get_text() for t in ax.get_xticklabels()] == ["A", "B", "C"] + assert_allclose(heights(ax), [80, 20, 0, 0, 30, 70]) + _, axes = c.viz.plot_loadings_family_donut(first, second, colors) + for ax, weights in zip(axes, [[0.8, 0.2], [0.3, 0.7]]): + assert_allclose( + [(p.theta2 - p.theta1) / 360 for p in ax.patches], weights, atol=1e-7 + ) + assert len(ax.get_legend().get_texts()) == 2 + + +def test_correlation_matrix_axes_values_and_missing_annotations(visualizer_case): + c = visualizer_case + df = pd.DataFrame( + [[0.25, -0.85, np.nan], [-0.4, 0.6, 0]], + index=["PC1", "PC3"], + columns=["teff_gspphot", "logg_gspphot", "custom"], + ) + original = df.copy(deep=True) + _, ax = c.viz.plot_correlation_heatmap(df) + assert_allclose(ax.images[0].get_array(), df, equal_nan=True) + assert_allclose(ax.images[0].get_clim(), [-1, 1]) + assert [t.get_text() for t in ax.get_xticklabels()] == ["T_eff", "log g", "custom"] + assert {(t.get_position(), t.get_text()) for t in ax.texts} == { + ((0, 0), "0.25"), + ((1, 0), "-0.85"), + ((0, 1), "-0.40"), + ((1, 1), "0.60"), + ((2, 1), "0.00"), + } + pd.testing.assert_frame_equal(df, original) + + +@pytest.mark.parametrize("components", [1, 3, 10]) +def test_eigenspectra_coordinates_variance_and_line_positions( + visualizer_case, components +): + c = visualizer_case + L = np.array( + [[0.1, -0.4, 0.9, -0.2], [-0.7, 0.3, -0.1, 0.5], [0.2, 0.6, -0.3, -0.8]] + ) + pca = SimpleNamespace( + loadings=L, explained_variance_ratio=np.array([0.7, 0.2, 0.1]) + ) + wl = np.array([3800.0, 4400.0, 5500.0, 6800.0]) + _, axes = c.viz.plot_eigenspectra( + pca, wl, {"inside": 4861.0, "outside": 7200.0}, components + ) + for i, ax in enumerate(axes): + assert_array_equal(ax.lines[0].get_xdata(), wl) + assert_array_equal(ax.lines[0].get_ydata(), L[i]) + assert_allclose(ax.lines[2].get_xdata(), [4861, 4861]) + assert f"{[70,20,10][i]:.1f}%" in ax.get_ylabel() + assert len(axes) == min(components, 3) + assert "Å" in axes[-1].get_xlabel() + + +@pytest.mark.parametrize("lr", [False, True]) +def test_training_history_minimum_is_not_last_and_distinct_series(visualizer_case, lr): + c = visualizer_case + h = {"train_loss": [9.0, 3, 5, 2], "val_loss": [8.0, 1, 4, 6]} + if lr: + h["lr_history"] = [0.01, 0.01, 0.001, 0.0001] + _, axes = c.viz.plot_training_history(h) + assert_array_equal(axes[0].lines[0].get_ydata(), h["train_loss"]) + assert_array_equal(axes[0].lines[1].get_ydata(), h["val_loss"]) + assert_array_equal(axes[0].lines[0].get_xdata(), [1, 2, 3, 4]) + assert_allclose(axes[0].lines[2].get_xdata(), [2, 2]) + assert "1.00000" in text(axes[0]) + if lr: + assert_array_equal(axes[1].lines[0].get_ydata(), h["lr_history"]) + + +@pytest.mark.parametrize("n_samples", [1, 3, 6]) +def test_reconstruction_drawn_rows_and_manual_mse(visualizer_case, n_samples): + c = visualizer_case + X = c.Z.copy() + recon = X + np.column_stack([np.arange(1, 7), np.arange(1, 7) * 2]) + _, axes = c.viz.plot_ae_reconstruction(X, recon, ["a", "b"], n_samples, c.y) + observed = set() + for ax in axes: + row = next(i for i in range(6) if np.array_equal(ax.lines[0].get_ydata(), X[i])) + observed.add(row) + assert_array_equal(ax.lines[1].get_ydata(), recon[row]) + assert f"{2.5*(row+1)**2:.5f}" in ax.get_title() + assert c.y[row] in ax.get_title() + assert len(observed) == n_samples + assert_array_equal(X, c.Z) + + +def test_ae_pca_comparison_does_not_substitute_metrics(visualizer_case): + c = visualizer_case + df = pd.DataFrame( + { + "method": ["PCA", "AE", "PCA", "AEwide"], + "n_components": [4, 2, 1, 3], + "mse_mean": [0.03, 0.17, 0.9, 0.11], + } + ) + _, ax = c.viz.plot_ae_vs_pca(df) + assert_array_equal(ax.lines[0].get_xdata(), [1, 4]) + assert_allclose(ax.lines[0].get_ydata(), [0.9, 0.03]) + assert_allclose(ax.lines[1].get_ydata(), [0.17, 0.17]) + assert_allclose(ax.lines[2].get_ydata(), [0.11, 0.11]) + assert ax.get_legend_handles_labels()[1] == ["PCA", "AE", "AEwide"] + + +def test_interpolation_actual_path_feature_order_and_endpoints(visualizer_case): + c = visualizer_case + Z = c.Z[:3] + X = np.array([[0.0, 0, 0], [1, 8, 3], [2, 16, 6]]) + _, axes = c.viz.plot_latent_interpolation( + Z, X, ["slow", "fast", "middle"], "A", "B" + ) + assert_array_equal(offsets(axes[0].collections[0]), Z) + assert_allclose(axes[0].collections[0].get_array(), [0, 0.5, 1]) + assert_array_equal(offsets(axes[0].collections[1]), Z[[0]]) + assert_array_equal(offsets(axes[0].collections[2]), Z[[-1]]) + assert [t.get_text() for t in axes[1].get_xticklabels()] == [ + "fast", + "middle", + "slow", + ] + for i, line in enumerate(axes[1].lines): + assert_array_equal(line.get_ydata(), X[i, [1, 2, 0]]) + + +def test_error_family_mean_is_feature_weighted_and_std_is_between_features( + visualizer_case, +): + c = visualizer_case + X = np.zeros((3, 5)) + # Constant residual columns give feature MSEs 1,4,9,16,25. + recon = np.tile([1.0, 2, 3, 4, 5], (3, 1)) + pca = SimpleNamespace( + _FAMILIES={"A": [r"^a"], "B": [r"^b"]}, _FAMILY_COLORS=["red", "blue"] + ) + _, axes = c.viz.plot_ae_error_by_family( + X, recon, ["a1", "a2", "b1", "b2", "b3"], pca + ) + assert_allclose(widths(axes[0]), [2.5, 50 / 3]) + assert_allclose(axes[0].lines[-1].get_xdata(), [11, 11]) + # Sample SD over feature means, not dispersion among the three identical rows. + segments = axes[0].collections[0].get_segments() + assert_allclose(segments[0][:, 0], [2.5 - 3 / sqrt(2), 2.5 + 3 / sqrt(2)]) + assert_allclose(segments[1][:, 0], [50 / 3 - sqrt(193 / 3), 50 / 3 + sqrt(193 / 3)]) + assert_allclose(offsets(axes[1].collections[0]), [[2, 2.5]]) + assert_allclose(offsets(axes[1].collections[1]), [[3, 50 / 3]]) + + +def test_spectral_type_means_for_aligned_unequal_classes(visualizer_case): + c = visualizer_case + X = np.column_stack([np.arange(22.0), np.arange(22.0) ** 2]) + R = X + [2.0, -3.0] + types = np.array(["F"] * 10 + ["G"] * 12) + try: + result = c.viz.plot_ae_recon_by_spectral_type( + X, R, types, ["feature_Hα_eq_width", "feature_Na_D_eq_width"] + ) + except Exception as exc: + assert False, f"Valid aligned reconstruction must remain usable: {exc}" + _, axes = result + assert_allclose(heights(axes[0]), [4.5, 28.5, 6.5, 25.5]) + assert_allclose(heights(axes[1]), [15.5, 1513 / 6, 17.5, 1513 / 6 - 3]) + assert "n=10" in axes[0].get_title() and "n=12" in axes[1].get_title() + assert c.viz.plot_ae_recon_by_spectral_type(X[:4], R[:4], types[:4], []) == ( + None, + None, + ) + + +def test_histogram_densities_integrate_and_class_mean_median_are_distinct( + visualizer_case, +): + c = visualizer_case + values = np.array([1.0, 2, 9, 4, 6, 12]) + _, ax = c.viz.plot_ae_error_distribution(values, c.y) + # Each class has its own normalized density, even with unequal counts. + for container in ax.containers: + assert_allclose(sum(p.get_width() * p.get_height() for p in container), 1) + assert "STAR (n=3, μ=5.3333)" in ax.get_legend_handles_labels()[1] + assert_allclose([line.get_xdata()[0] for line in ax.lines], [4, 7, 6]) + _, axes = c.viz.plot_ae_error_distribution_logscale(values, c.y) + assert axes[1].get_xscale() == "log" + for ax in axes: + for container in ax.containers: + assert_allclose(sum(p.get_width() * p.get_height() for p in container), 1) + assert_allclose([line.get_xdata()[0] for line in ax.lines], [4, 7, 6]) + + +def hdb_case(module, labels): + hdb = module.HDBSCANAnalyzer() + hdb.labels_ = np.asarray(labels) + hdb._compute_stats() + hdb._build_palette() + hdb.labels_pres_ = hdb.labels_.copy() + hdb.ids_pres_ = hdb.cluster_ids_.copy() + hdb.n_clusters_pres_ = hdb.n_clusters_ + hdb.color_map_pres_ = hdb.color_map_.copy() + return hdb + + +@pytest.mark.parametrize("labels", [[2, -1, 7, 2, 7, 2], [-1] * 6, [7] * 6]) +def test_hdbscan_real_analyzer_state_and_point_populations( + visualizer_case, hdbscan_module, labels +): + c = visualizer_case + hdb = hdb_case(hdbscan_module, labels) + _, axes = c.viz.plot_hdbscan_clusters(c.Z, hdb, c.y) + for sc, cid in zip(axes[0].collections, [-1] + hdb.cluster_ids_): + assert_array_equal(offsets(sc), c.Z[hdb.labels_ == cid]) + assert_allclose(sc.get_facecolors()[0, :3], hdb.color_map_[cid][:3]) + for sc, cls in zip(axes[1].collections, sorted(set(c.y))): + assert_array_equal(offsets(sc), c.Z[c.y == cls]) + assert f"n={labels.count(-1)}" in text(axes[0]) + + +@pytest.mark.parametrize("has_hr", [False, True]) +def test_hdbscan_presentation_and_split_consistent_populations( + visualizer_case, hdbscan_module, has_hr +): + c = visualizer_case + hdb = hdb_case(hdbscan_module, [2, -1, 7, 2, 7, 2]) + meta = c.meta if has_hr else c.meta[["obsid"]] + _, axes = c.viz.plot_hdbscan_presentation(c.Z, hdb, meta) + for sc, cid in zip(axes[0].collections, [-1, 2, 7]): + assert_array_equal(offsets(sc), c.Z[hdb.labels_ == cid]) + first, second = c.viz.plot_hdbscan_present_split(c.Z, hdb, meta) + assert_array_equal(offsets(first.axes[0].collections[1]), c.Z[[0, 3, 5]]) + if has_hr: + assert_array_equal( + offsets(second.axes[0].collections[1]), + c.meta.iloc[[0, 3, 5]][["teff_gspphot", "logg_gspphot"]], + ) + assert second.axes[0].xaxis_inverted() and second.axes[0].yaxis_inverted() + else: + assert second is None + assert c.viz.plot_hdbscan_hr(c.Z, hdb, meta) == (None, None) + + +def test_hdbscan_hr_values_and_temperature_overlay(visualizer_case, hdbscan_module): + c = visualizer_case + hdb = hdb_case(hdbscan_module, [2, -1, 7, 2, 7, 2]) + meta = c.meta.copy() + meta.iloc[1, 2] = np.nan + _, axes = c.viz.plot_hdbscan_hr(c.Z, hdb, meta) + assert_array_equal( + offsets(axes[0].collections[1]), + meta.iloc[[0, 3, 5]][["teff_gspphot", "logg_gspphot"]], + ) + assert_array_equal(offsets(axes[1].collections[0]), c.Z) + assert_array_equal(axes[1].collections[0].get_array(), meta.teff_gspphot) + assert axes[0].xaxis_inverted() and axes[0].yaxis_inverted() + + +def test_hdbscan_sensitivity_exact_columns_and_marked_parameters(visualizer_case): + c = visualizer_case + df = pd.DataFrame( + { + "min_cluster_size": [5, 12, 30], + "n_clusters": [7, 4, 2], + "pct_noise": [8.0, 21, 43], + } + ) + _, axes = c.viz.plot_hdbscan_sensitivity(df, 12, 30) + for ax, expected in zip(axes, [[7, 4, 2], [8, 21, 43]]): + assert_array_equal(ax.lines[0].get_xdata(), [5, 12, 30]) + assert_array_equal(ax.lines[0].get_ydata(), expected) + assert_array_equal(ax.lines[1].get_xdata(), [12, 12]) + assert_array_equal(ax.lines[2].get_xdata(), [30, 30]) + + +def cluster_means(): + return pd.DataFrame( + [[0.1, -2.0, 1.0, 0.5, -0.3, 0], [2.0, 0.4, -0.1, -0.6, 0.9, 0]], + index=[2, 7], + columns=list("abcdef"), + ) + + +def test_cluster_heatmap_discriminating_columns_counts_and_values(visualizer_case): + c = visualizer_case + df = cluster_means() + _, ax = c.viz.plot_hdbscan_feature_heatmap(df, np.array([7, 2, 7, -1, 7]), n_top=3) + assert [t.get_text() for t in ax.get_xticklabels()] == ["b", "a", "e"] + assert_array_equal(ax.images[0].get_array(), df[["b", "a", "e"]]) + assert [t.get_text() for t in ax.get_yticklabels()] == ["C2 (n=1)", "C7 (n=3)"] + + +def test_cluster_profiles_signed_top_five_not_first_five(visualizer_case): + c = visualizer_case + _, axes = c.viz.plot_hdbscan_feature_profiles( + cluster_means(), np.array([7, 2, 7, -1, 7]), n_show=2 + ) + assert "C7" in axes[0].get_title() and "n=3" in axes[0].get_title() + assert_allclose(widths(axes[0]), [2, 0.9, -0.6, 0.4, -0.1]) + assert_allclose(widths(axes[1]), [-2, 1, 0.5, -0.3, 0.1]) + + +@pytest.mark.parametrize( + "confidence", [None, np.array([0.45, 0.7, 0.95, 0.6, 0.8, 0.5])] +) +def test_xgboost_classes_confidence_and_cluster_associations( + visualizer_case, confidence +): + c = visualizer_case + pred = np.array(["F", "G", "F", "M", "F", "G"]) + cl = np.array([2, -1, 7, 2, 7, 2]) + _, axes = c.viz.plot_xgboost_umap(c.Z, pred, confidence, cl, {2: "red", 7: "blue"}) + for sc, cls in zip(axes[0].collections, ["F", "G", "M"]): + assert_array_equal(offsets(sc), c.Z[pred == cls]) + assert f"n={(pred == cls).sum()}" in sc.get_label() + if confidence is None: + assert "non disponible" in text(axes[1]) + else: + assert_array_equal(offsets(axes[1].collections[0]), c.Z) + assert_array_equal(axes[1].collections[0].get_array(), confidence) + assert_array_equal(offsets(axes[2].collections[0]), c.Z[[1]]) + assert_array_equal(offsets(axes[2].collections[1]), c.Z[[0, 3, 5]]) + assert_array_equal(offsets(axes[2].collections[2]), c.Z[[2, 4]]) + + +def test_fg_population_threshold_and_overlays(visualizer_case): + c = visualizer_case + assert c.viz.plot_fg_confusion(c.Z, np.array(["F"] * 6)) == (None, None) + Z = np.arange(26.0).reshape(13, 2) + pred = np.array(["F"] * 3 + ["M"] * 2 + ["G"] * 8) + _, ax = c.viz.plot_fg_confusion(Z, pred) + assert_array_equal(offsets(ax.collections[0]), Z) + assert_array_equal(offsets(ax.collections[1]), Z[:3]) + assert_array_equal(offsets(ax.collections[2]), Z[5:]) + assert ax.get_legend_handles_labels()[1] == ["Prédit F (n=3)", "Prédit G (n=8)"] + + +def rank_trustworthiness(X, Z, k): + """Independent scalar rank-penalty definition, no sklearn internals. + + Inputs in tests have no distance ties. Self is removed by identity. + """ + n = len(X) + penalty = 0 + for i in range(n): + ref = sorted( + (j for j in range(n) if j != i), key=lambda j: fsum((X[i] - X[j]) ** 2) + ) + emb = sorted( + (j for j in range(n) if j != i), key=lambda j: fsum((Z[i] - Z[j]) ** 2) + ) + for j in emb[:k]: + if j not in ref[:k]: + penalty += ref.index(j) + 1 - k + return 1 - 2 * penalty / (n * k * (2 * n - 3 * k - 1)) + + +@pytest.mark.integration +@pytest.mark.parametrize("subsample", [12, 9]) +def test_real_sklearn_trustworthiness_independent_rank_oracle( + visualizer_case, subsample +): + c = visualizer_case + rng = np.random.default_rng(1729) + X = rng.normal(size=(12, 2)) + bad = X[np.array([7, 0, 9, 4, 1, 10, 2, 11, 3, 6, 5, 8])] + idx = np.random.default_rng(42).choice(12, size=subsample, replace=False) + _, ax = c.viz.plot_trustworthiness( + X, X.copy(), bad, k_values=[1, 2, 3], n_subsample=subsample + ) + expected = [rank_trustworthiness(X[idx], bad[idx], k) for k in [1, 2, 3]] + assert_allclose(ax.lines[0].get_ydata(), [1, 1, 1], atol=1e-14) + assert_allclose(ax.lines[1].get_ydata(), expected, atol=1e-14) + assert_array_equal(ax.lines[1].get_xdata(), [1, 2, 3]) + assert f"{sum(expected)/3:.4f}" in ax.lines[1].get_label() + assert any(v < 1 for v in expected) + + +@pytest.mark.parametrize("k", [4, 5, 8]) +def test_trustworthiness_impossible_neighbors_explicit_refusal(visualizer_case, k): + c = visualizer_case + X = np.arange(16.0).reshape(8, 2) + with pytest.raises(ValueError, match="n_neighbors"): + c.viz.plot_trustworthiness(X, X, X, k_values=[k]) + + +def test_stability_producer_order_and_mean_without_reference( + visualizer_case, embedding_module, monkeypatch +): + c = visualizer_case + + # Execute the actual report producer; only expensive embedding fitting is + # replaced with seed-dependent geometry. This is not a real UMAP fit. + def geometry(engine, X): + out = X[:, :2].copy() + out[0, 0] += engine.random_state**2 + return out + + monkeypatch.setattr(embedding_module.EmbeddingEngine, "fit_transform", geometry) + report = embedding_module.EmbeddingEngine(method="tsne").stability_report( + c.Z, n_seeds=4 + ) + assert_array_equal(report.seed, [0, 1, 2, 3]) + assert report.procrustes_distance.iloc[0] == 0 + _, ax = c.viz.plot_stability(report) + assert_allclose(heights(ax), report.procrustes_distance) + expected = sum(report.procrustes_distance.iloc[1:]) / 3 + assert f"{expected:.4f}" in text(ax) + # Distinct asymmetric supplied distances discriminate mean from median. + frame = pd.DataFrame( + { + "seed": [0, 1, 2, 3], + "method": ["TSNE"] * 4, + "procrustes_distance": [0, 0.01, 0.02, 0.9], + } + ) + _, ax = c.viz.plot_stability(frame) + assert "0.3100" in text(ax) + + +@pytest.mark.parametrize("umap", [False, True]) +def test_synthesis_preserves_distinct_geometries_and_physical_colors( + visualizer_case, umap +): + c = visualizer_case + pca, ae, embedding = c.Z * [2, 3], c.Z + 100, c.Z * [-1, 4] + fig = c.viz.plot_synthesis_grid(ae, c.y, c.meta, pca, embedding if umap else None) + data_axes = [a for a in fig.axes if a.get_xlabel()] + geometries = [pca] + ([embedding] if umap else []) + [ae] + for row, Z in enumerate(geometries): + for sc in data_axes[row * 3].collections: + assert_array_equal(offsets(sc), Z[c.y == sc.get_label()]) + for col, param in [(1, "teff_gspphot"), (2, "mh_gspphot")]: + sc = data_axes[row * 3 + col].collections[0] + assert_array_equal(offsets(sc), Z) + assert_array_equal(sc.get_array(), c.meta[param]) + + +@pytest.mark.parametrize("suffix", ["png", "pdf"]) +def test_real_export_readable_and_same_semantic_figure( + visualizer_case, tmp_path, suffix +): + from PIL import Image + + c = visualizer_case + path = tmp_path / "new" / f"figure.{suffix}" + fig, ax = c.viz.plot_embedding(c.Z, save_path=path) + assert_array_equal(offsets(ax.collections[0]), c.Z) + if suffix == "png": + with Image.open(path) as im: + im.verify() + with Image.open(path) as im: + pixels = np.asarray(im.convert("RGB")) + assert pixels.shape[0] > 100 and pixels.std() > 1 + else: + assert path.read_bytes().startswith(b"%PDF-") + assert b"%%EOF" in path.read_bytes()[-50:] + assert fig.canvas.get_renderer() is not None + + +def test_save_defaults_override_no_output_and_write_failure( + visualizer_case, tmp_path, monkeypatch +): + c = visualizer_case + out = tmp_path / "default" + viz = c.module.DimRedVisualizer(output_dir=out, dpi=50) + assert out.is_dir() + viz.plot_embedding(c.Z) + assert (out / "embedding_umap.png").is_file() + explicit = tmp_path / "explicit.png" + viz.plot_embedding(c.Z, method="t-SNE", save_path=explicit) + assert explicit.is_file() and not (out / "embedding_t-sne.png").exists() + monkeypatch.chdir(tmp_path) + c.viz.plot_embedding(c.Z) + assert set(tmp_path.iterdir()) == {out, explicit} + target = tmp_path / "blocked" + target.write_text("existing", encoding="utf-8") + with pytest.raises(OSError): + c.viz.plot_embedding(c.Z, save_path=target / "figure.png") + assert target.read_text() == "existing" + + +def test_real_kde_reproducible_star_selection_and_observation_colors(visualizer_case): + c = visualizer_case + rng = np.random.default_rng(1729) + Z = rng.normal(size=(140, 2)) + labels = np.array(["STAR"] * 120 + ["QSO"] * 20) + meta = pd.DataFrame({"teff_gspphot": np.arange(140.0) + 4000}) + meta.loc[7, "teff_gspphot"] = np.nan + results = [] + for _ in range(2): + _, axes = c.viz.plot_latent_kde(Z, labels, meta) + scatter = next( + sc + for sc in axes[0].collections + if hasattr(sc, "get_offsets") and len(sc.get_offsets()) > 1 + ) + actual = offsets(scatter) + values = np.asarray(scatter.get_array()) + assert len(actual) == 119 + expected_pairs = { + (tuple(Z[i]), meta.teff_gspphot[i]) for i in range(120) if i != 7 + } + assert { + (tuple(point), value) for point, value in zip(actual, values) + } == expected_pairs + results.append((actual.copy(), values.copy())) + assert_array_equal(results[0][0], results[1][0]) + assert_array_equal(results[0][1], results[1][1]) + + +@pytest.mark.parametrize("suffix", ["png", "pdf"]) +def test_direct_ae_export_real_file_and_history_preserved( + visualizer_case, tmp_path, suffix +): + c = visualizer_case + history = {"train_loss": [5.0, 2.0, 1.0], "val_loss": [6.0, 1.0, 3.0]} + target = tmp_path / f"history.{suffix}" + _, axes = c.viz.plot_training_history(history, save_path=target) + assert target.read_bytes().startswith(b"\x89PNG" if suffix == "png" else b"%PDF-") + assert_array_equal(axes[0].lines[0].get_ydata(), [5, 2, 1]) + assert history == {"train_loss": [5.0, 2.0, 1.0], "val_loss": [6.0, 1.0, 3.0]} + + +def test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect( + visualizer_case, +): + c = visualizer_case + original = c.meta.copy(deep=True) + _, ax = c.viz.plot_hr_teff_regions(c.meta) + assert_array_equal( + offsets(ax.collections[0]), c.meta[["teff_gspphot", "logg_gspphot"]] + ) + assert_array_equal(ax.collections[0].get_array(), c.meta.teff_gspphot) + assert ax.xaxis_inverted() and ax.yaxis_inverted() + pd.testing.assert_frame_equal(c.meta, original) + + +def test_analytic_normal_mass_oracle_has_known_solution(): + # In two dimensions, integrating the polar area element r dr dtheta gives + # P(f(X)>=t)=1-2*pi*t. This validates the red proof's independent quadrature. + grid = np.linspace(-7, 7, 601) + x, y = np.meshgrid(grid, grid) + density = np.exp(-(x * x + y * y) / 2) / (2 * np.pi) + area = (grid[1] - grid[0]) ** 2 + for mass in [0.68, 0.95, 0.99]: + threshold = (1 - mass) / (2 * np.pi) + assert_allclose(density[density >= threshold].sum() * area, mass, atol=0.002) From ed1d91ec0efb619aeb77a5bf7e4a0ab43fa84cac Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Tue, 10 Nov 2026 22:16:03 -0500 Subject: [PATCH 2/8] test(dimred): archive M2.8 scientific proofs and replay evidence --- audit/M28_PROOFS.md | 80 + audit/check_m28_boundaries.py | 63 +- audit/check_m28_evidence.py | 87 +- audit/check_m28_validation.py | 164 + audit/m28_boundary_final_results.json | 2035 ++++ audit/m28_boundary_results.json | 1485 +++ audit/m28_evidence_final_results.json | 9827 +++++++++++++++ audit/m28_kde_final_results.json | 2375 ++++ audit/m28_kde_followup_results.json | 2375 ++++ audit/m28_mutation_initial_results.json | 10000 +++++++++++++++ audit/m28_mutation_results.json | 10007 ++++++++++++++++ audit/m28_proof_baseline_results.json | 1222 ++ audit/m28_proof_controls_final_results.json | 9323 ++++++++++++++ audit/m28_proof_controls_initial_results.json | 5949 +++++++++ audit/m28_proof_controls_results.json | 8171 +++++++++++++ audit/m28_reverse_results.json | 2352 ++++ audit/m28_validation_results.json | 142 + tests/proofs_dimred_visualizer.py | 90 +- tests/test_dimred_visualizer.py | 3 + 19 files changed, 65726 insertions(+), 24 deletions(-) create mode 100644 audit/M28_PROOFS.md create mode 100644 audit/check_m28_validation.py create mode 100644 audit/m28_boundary_final_results.json create mode 100644 audit/m28_boundary_results.json create mode 100644 audit/m28_evidence_final_results.json create mode 100644 audit/m28_kde_final_results.json create mode 100644 audit/m28_kde_followup_results.json create mode 100644 audit/m28_mutation_initial_results.json create mode 100644 audit/m28_mutation_results.json create mode 100644 audit/m28_proof_baseline_results.json create mode 100644 audit/m28_proof_controls_final_results.json create mode 100644 audit/m28_proof_controls_initial_results.json create mode 100644 audit/m28_proof_controls_results.json create mode 100644 audit/m28_reverse_results.json create mode 100644 audit/m28_validation_results.json diff --git a/audit/M28_PROOFS.md b/audit/M28_PROOFS.md new file mode 100644 index 0000000..3adfa59 --- /dev/null +++ b/audit/M28_PROOFS.md @@ -0,0 +1,80 @@ +# M2.8 — immutable red evidence manifest + +Refs #43. Base39dad874610745ccd456d26972e90f6fb3a11405; +production visualizer blob624b857bca5833c3401204b0a592b9ae6ffc2902 unchanged. +`tests/proofs_dimred_visualizer.py` is explicitly executed, never discovered +by the normal test naming pattern. It is committed in one final archive, +pushed/read back, then removed normally from the Draft PR head. No xfail. +The designated archive SHA is linked in the matrix after it exists; its +ancestry preserves exact conftest, green tests, source, scripts and results. + +Final baseline: **22 cases,21FAIL/1PASS/0ERROR/SKIP**. This is **15 grouped +findings**, not21bugs. The passing `n_show=0` case already refuses an impossible +subplot count. It is a control/observation, not a requirement to keep one +particular exception text. Green valid-data cases accompany invalid proofs. + +| ID | Red test selection / failed cases | Independent invariant and admitted outcomes | +|---|---|---| +| D01 | `kde_labeled_regions` /2 | Real SciPy and analytic Gaussian covariance diag(4,9). Independent expanded-grid quadrature and analytic `max(0,1-12*pi*t)`; density-height percentiles do not specify enclosed probability. Integrated thresholds accepted. M1 already noted this risk; no separate corrective issue existed. | +| D02 | `hr_region_vertices` /1 | All gravity coordinates must lie in gravity-domain bounds. Current mixed K/dex margin yields−93.3175dex for supplied ordinary data. Nonempty informative regions required; corrected gravity margin admitted. | +| D03 | `hr_population_title` /2 | Displayed count must be supplied population count6/9 or omitted. Hardcoded43019 is neither. Omission admitted; stellar-region taxonomy is not validated. | +| D04 | `reconstruction_cardinality` /1 | Deleted middle observation: actual F mean1140/13, plotted1060/12. Incompatible lengths must not reassign labels by truncation. Pertinent ValueError/RuntimeError refusal or true correspondence admitted; valid aligned F10/G12 still must work. No external equal-size IDs inferred. | +| D05 | `cluster_colorbar` /2 | Nonconsecutive2/7 labels and actual analyzer palette. Displayed colorbar mapping at each CID must match the point RGB; an informative categorical annotation can replace a colorbar. No fixed aesthetic palette imposed. | +| D06 | `actual_unit_confidence` /1 | Values all1 are compatible with actual probabilities. Without an availability flag the renderer cannot assert predict_proba absent. Missing probability still tested as None in green; no calibrated probability claim. | +| D07 | `no_physical_columns` /2 | Class-only AE/zoom inputs have a defined nonempty class plot or relevant explicit refusal; scalar axes TypeError is not a decision. Correct scalar-to-array handling admitted. | +| D08 | `cluster_profiles_unavailable` /2,1PASS | n_show1 must address an actual axis; n_show4/two clusters must hide unused data slots. n_show0 explicit refusal admitted. Top-five signed numeric data remain protected in green. | +| D09 | `more_reconstructions` /1 | Requested4/available2 must not present blank measurement panels. Hide unused or allocate actual count; valid1/3/6 rows still exact. | +| D10 | `truncated_variance_annotation` /1 | Reported3PCs cannot be paired with85% when3 actually explain100%. Correct numeric association or removal/clarification of that claim accepted; no PCA sign convention. | +| D11 | `log_histogram_keeps` /1 | Strictly positive1e-8..1 MSE values cannot disappear below an arbitrary1e-4 bin floor without indication. Positive-support bin choice admitted; truezero/negative policy remains open. | +| D12 | `fifth_class` /1 | All five supplied classes represented or relevant explicit refusal; no silent loss due palette length. Nominal <=4class density arithmetic separately protected. | +| D13 | `default_output_directory` /2 | Configured output_dir must actually create a default file on successful training/comparison plot; direct calls currently bypass_save. Explicit exports do work and are green. | +| D14 | `trustworthiness_axis_contains` /1 | Calculated.5,.55882353,.50396825 cannot all be below a fixed.75 display floor without indication. Full0..1 range admitted; independent numerical computation stays green. | +| D15 | `default_eigenspectrum` /1 | Actual default Balmer mathtext must draw with Agg. Doubled backslashes cause a parser error. Supplied custom marker labels are already green; unescaping default labels admitted. Notebook01 supplies RAIES, so no historical failure asserted. | + +## Reproduction and admissibility + +On the archived checkout: + +```powershell +python -m pytest -q tests/proofs_dimred_visualizer.py --tb=short +``` + +From the green checkout with the fixed archive SHA: + +```powershell +python audit/check_m28_evidence.py --mode baseline --proofs-ref ARCHIVE_SHA +python audit/check_m28_evidence.py --mode proofs --proofs-ref ARCHIVE_SHA +``` + +The runner reads exact proof/green/fixture bytes from Git into its own synthetic +TemporaryDirectory; production source is unchanged. No real datasets are copied. +Exit1 for explicit proof pytest is expected. The runner itself reports evidence +without treating expected counterexamples as an infrastructure failure. + +Mutations M01–M16 are separately scoped to green tests, all reached and KILLED +by assertions with matching collection. They are not15production fixes. +Fourteen admissible C01–C14 candidates exercise percentages, export, aesthetic +colors, explicit alignment refusal, gravity margin, count omission, small MSE +support, scalar axes, profile addressing, full trust range, hidden unused +reconstructions, integrated KDE and valid mathtext. These are experimental +copies, not patches proposed for production. Selections and test counts are in +the ledgers; each candidate was not run against the entire repository. + +F01 always-refuse is rejected by the valid aligned mean oracle, F02 empty HR +by explicit informative-region assertion. F03 standard-normal thresholds for +every KDE initially survived an almost isotropic sample. Covariance diag(4,9) +now discriminates it: F03 KILLED, while integrated C13 remains PASS. The final +KDE ledger supersedes only this narrow earlier evidence. Old results remain +unchanged. Analytic mass is clamped to0 above peak density; this avoids an +incorrect negative mass in the audit oracle itself. + +## Limits + +Policy adapters are bounded: explicit diagnostic keywords, current French count +and variance annotation grammar, Matplotlib colorbar/annotation interfaces and +probability contour order. They do not parse arbitrary scientific language or +all future plotting implementations. A future API/representation change must +update adapters while preserving numerical contracts. In particular diagnostic +wording is not universal proof of correct refusal, class-based availability is +not object identity and a renderable figure is not astrophysical validation. +No green test demands retaining the demonstrated red behavior. diff --git a/audit/check_m28_boundaries.py b/audit/check_m28_boundaries.py index 1072b98..c230cfe 100644 --- a/audit/check_m28_boundaries.py +++ b/audit/check_m28_boundaries.py @@ -1,6 +1,7 @@ """Observe unsupported/degenerate visualization boundaries without freezing policy.""" import ast +import argparse import hashlib import importlib.util import json @@ -30,6 +31,9 @@ def load(name): def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--output", default="test-results/m28-boundaries.json") + args = parser.parse_args() source = ROOT / "src/dimred/dimred_visualizer.py" package = types.ModuleType("dimred") package.__path__ = [str(source.parent)] @@ -176,6 +180,33 @@ def call(name=name): {}, ), ) + pca = types.SimpleNamespace( + loadings=np.array([[0.1, -0.4, 0.9, -0.2]]), + explained_variance_ratio=np.array([1.0]), + ) + add( + "eigenspectra_default_lines", + lambda: viz.plot_eigenspectra( + pca, np.array([3800.0, 4400.0, 5500.0, 6800.0]), n_components=1 + ), + ) + for label, confidence in [ + ("negative", np.full(12, -0.1)), + ("above_one", np.full(12, 1.2)), + ("NaN", np.full(12, np.nan)), + ("Inf", np.full(12, np.inf)), + ("wrong_length", np.arange(5.0) / 5), + ]: + add( + "confidence_" + label, + lambda confidence=confidence: viz.plot_xgboost_umap( + Z, + np.array(["F"] * 12), + confidence, + np.zeros(12, dtype=int), + {0: "blue"}, + ), + ) observations = [] for label, function in jobs: with warnings.catch_warnings(record=True) as captured: @@ -214,14 +245,44 @@ def call(name=name): } ) plt.close("all") + consumers = [] + for path in (ROOT / "notebooks/dimred").glob("*.ipynb"): + notebook = json.loads(path.read_text(encoding="utf-8")) + for index, cell in enumerate(notebook["cells"]): + if cell.get("cell_type") != "code": + continue + content = "".join(cell["source"]) + try: + tree = ast.parse(content) + except SyntaxError: + consumers.append( + {"notebook": path.name, "cell_index": index, "unparsed_cell": True} + ) + continue + for node in ast.walk(tree): + if ( + isinstance(node, ast.Call) + and isinstance(node.func, ast.Attribute) + and node.func.attr.startswith("plot_") + ): + consumers.append( + { + "notebook": path.name, + "cell_index": index, + "line": node.lineno, + "call": ast.unparse(node), + } + ) result = { "python": sys.version, "source_sha256": hashlib.sha256(source.read_bytes()).hexdigest(), "backend": matplotlib.get_backend(), "inventory": inventory, "observations": observations, + "static_notebook_calls": consumers, } - destination = ROOT / "audit/m28_boundary_results.json" + destination = ROOT / args.output + destination.parent.mkdir(parents=True, exist_ok=True) destination.write_text( json.dumps(result, indent=2, ensure_ascii=True, default=float) + "\n", encoding="utf-8", diff --git a/audit/check_m28_evidence.py b/audit/check_m28_evidence.py index 5afdd8d..e4ee077 100644 --- a/audit/check_m28_evidence.py +++ b/audit/check_m28_evidence.py @@ -140,6 +140,13 @@ ] CONTROLS = [ + ( + "C14_renderable_mathtext", + "plot_eigenspectra", + " nom,", + " nom.replace(chr(92)*2, chr(92)),", + "default_eigenspectrum", + ), ( "C01_equivalent_percent", "plot_variance_explained", @@ -189,6 +196,41 @@ "max(vals.min(), np.finfo(float).tiny)", "log_histogram_keeps", ), + ( + "C08_scalar_axes_supported", + "plot_ae_embedding", + "ax = axes[0]", + "axes = np.atleast_1d(axes)\n ax = axes[0]", + "no_physical_columns and plot_ae_embedding", + ), + ( + "C09_zoom_scalar_axes_supported", + "plot_latent_zoomed", + "ax = axes[0]", + "axes = np.atleast_1d(axes)\n ax = axes[0]", + "no_physical_columns and plot_latent_zoomed", + ), + ( + "C10_profile_single_slot", + "plot_hdbscan_feature_profiles", + "axes_flat = axes.flatten() if n_show > 1 else [axes]", + "axes_flat = np.asarray(axes).ravel()", + "cluster_profiles_unavailable and 1", + ), + ( + "C11_display_whole_trust_range", + "plot_trustworthiness", + "ax.set_ylim(0.75, 1.01)", + "ax.set_ylim(0, 1.01)", + "trustworthiness_axis_contains", + ), + ( + "C12_hide_unused_reconstructions", + "plot_ae_reconstruction", + "for i, (ax, si) in enumerate(zip(axes, idx)):", + "for unused in axes[len(idx):]:\n unused.set_visible(False)\n for i, (ax, si) in enumerate(zip(axes, idx)):", + "more_reconstructions or reconstruction_drawn_rows", + ), ] FALSE_REMEDIES = [ @@ -325,10 +367,13 @@ def run(tree, tests, selection, reverse=False): def main(): parser = argparse.ArgumentParser() parser.add_argument( - "--mode", choices=["mutations", "proofs", "reverse"], default="mutations" + "--mode", + choices=["mutations", "proofs", "reverse", "baseline"], + default="mutations", ) parser.add_argument("--output", default="test-results/m28-replay.json") parser.add_argument("--proofs-ref") + parser.add_argument("--only", nargs="+") args = parser.parse_args() protected = [SOURCE, GREEN, "tests/conftest.py"] before = {p: digest(ROOT / p) for p in protected} @@ -344,6 +389,39 @@ def main(): } plans = MUTANTS if args.mode == "mutations" else [] plans += CONTROLS + FALSE_REMEDIES if args.mode == "proofs" else [] + if args.mode == "proofs": + start = source.index(" zz_flat = ZZ.ravel()") + stop = source.index(" params = [", start) + old_levels = source[start:stop] + mass_levels = """ center = Z_stars.mean(axis=0) + scale = Z_stars.std(axis=0) + qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401) + qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401) + a, b = np.meshgrid(qx, qy) + density = kde(np.vstack([a.ravel(), b.ravel()])) + ordered = np.sort(density)[::-1] + mass = np.cumsum(ordered) / ordered.sum() + levels = sorted([float(ordered[np.searchsorted(mass, p)]) for p in [.68, .95, .99]]) + +""" + plans += [ + ( + "C13_integrated_kde_mass", + "plot_latent_kde", + old_levels, + mass_levels, + "kde_labeled_regions or real_kde_reproducible", + ), + ( + "F03_normal_thresholds_for_every_kde", + "plot_latent_kde", + old_levels, + " levels = [(1-p)/(2*np.pi) for p in [.99, .95, .68]]\n\n", + "kde_labeled_regions", + ), + ] + if args.only: + plans = [plan for plan in plans if plan[0] in args.only] with tempfile.TemporaryDirectory(prefix="m28-synthetic-") as directory: tree = Path(directory) (tree / "tests").mkdir() @@ -364,7 +442,12 @@ def main(): elif (ROOT / PROOF).exists(): shutil.copy2(ROOT / PROOF, tree / PROOF) (tree / "m28_trace.py").write_text(PLUGIN, encoding="utf-8") - tests = [GREEN] if args.mode != "proofs" else [PROOF] + payload["executed_files_lf_sha256"] = { + p: digest(tree / p) + for p in [SOURCE, GREEN, "tests/conftest.py", PROOF] + if (tree / p).exists() + } + tests = [GREEN] if args.mode in ["mutations", "reverse"] else [PROOF] baseline = run(tree, tests, "", reverse=args.mode == "reverse") payload["baseline"] = baseline for name, method, old, new, selection in plans: diff --git a/audit/check_m28_validation.py b/audit/check_m28_validation.py new file mode 100644 index 0000000..89cc62b --- /dev/null +++ b/audit/check_m28_validation.py @@ -0,0 +1,164 @@ +"""Record actual M2.8 validation commands, versions and protected-path checks.""" + +import argparse +import hashlib +from importlib.metadata import version +import json +import os +from pathlib import Path +import subprocess +import sys + +ROOT = Path(__file__).resolve().parents[1] +BASE = "39dad874610745ccd456d26972e90f6fb3a11405" + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--output", default="test-results/m28-validation.json") + parser.add_argument("--tests", action="store_true") + args = parser.parse_args() + files = [ + "src/dimred/dimred_visualizer.py", + "tests/conftest.py", + "tests/test_dimred_visualizer.py", + ] + helpers = [ + "audit/check_m28_evidence.py", + "audit/check_m28_boundaries.py", + "audit/check_m28_validation.py", + ] + result = { + "active_head": subprocess.check_output( + ["git", "rev-parse", "HEAD"], cwd=ROOT, text=True + ).strip(), + "python": sys.version, + "executable": sys.executable, + "versions": { + name: version(name) + for name in [ + "numpy", + "pandas", + "scipy", + "scikit-learn", + "matplotlib", + "pytest", + "black", + "ruff", + "pillow", + ] + }, + "effective_lf_sha256": { + p: hashlib.sha256( + (ROOT / p).read_text(encoding="utf-8").replace("\r\n", "\n").encode() + ).hexdigest() + for p in files + }, + "commands": [], + } + commands = [] + if args.tests: + commands += [ + [ + sys.executable, + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-W", + "error", + "--junitxml=test-results/m28-targeted-validation.xml", + ], + [ + sys.executable, + "-m", + "pytest", + "-q", + "--junitxml=test-results/m28-complete-validation.xml", + ], + [ + sys.executable, + "-m", + "pytest", + "-q", + "--import-mode=importlib", + "--junitxml=test-results/m28-importlib-validation.xml", + ], + ] + commands += [ + [ + sys.executable, + "-m", + "black", + "--check", + "src", + "tests", + "scripts", + "app.py", + *helpers, + ], + [ + sys.executable, + "-m", + "ruff", + "check", + "src", + "tests", + "scripts", + "app.py", + *helpers, + ], + [sys.executable, "-m", "pip", "check"], + ["git", "diff", "--check"], + [ + "git", + "diff", + "--exit-code", + BASE, + "--", + "src", + "notebooks", + "data", + "models", + "requirements", + "pyproject.toml", + ".github", + "app.py", + "AGENTS.md", + ], + ] + env = dict( + os.environ, MPLBACKEND="Agg", PYTHONHASHSEED="0", PYTHONIOENCODING="utf-8" + ) + for command in commands: + completed = subprocess.run( + command, + cwd=ROOT, + env=env, + text=True, + encoding="utf-8", + errors="replace", + capture_output=True, + timeout=240, + ) + result["commands"].append( + { + "command": command, + "exit_code": completed.returncode, + "stdout": completed.stdout, + "stderr": completed.stderr, + } + ) + print(" ".join(command[1:]), completed.returncode, flush=True) + result["all_commands_passed"] = all(c["exit_code"] == 0 for c in result["commands"]) + output = ROOT / args.output + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text( + json.dumps(result, indent=2, ensure_ascii=True) + "\n", encoding="utf-8" + ) + if not result["all_commands_passed"]: + raise SystemExit(1) + + +if __name__ == "__main__": + main() diff --git a/audit/m28_boundary_final_results.json b/audit/m28_boundary_final_results.json new file mode 100644 index 0000000..43ac6fd --- /dev/null +++ b/audit/m28_boundary_final_results.json @@ -0,0 +1,2035 @@ +{ + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "source_sha256": "f77107af006706586a839744fcea8a98656de29677b12d2b67a6971dea739e68", + "backend": "Agg", + "inventory": [ + { + "name": "__init__", + "line": 100, + "signature": "self, figsize: Tuple[float, float]=(9, 6), dpi: int=150, cmap_continuous: str='plasma', output_dir: Optional[str | Path]=None", + "returns": [] + }, + { + "name": "plot_variance_explained", + "line": 121, + "signature": "self, pca_analyzer, threshold: float=0.95, max_pcs: int=50, save_path: Optional[str]=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_loadings_heatmap", + "line": 213, + "signature": "self, pca_analyzer, n_pcs: int=10, n_features: int=30, save_path: Optional[str]=None", + "returns": [ + "(fig, ax)" + ] + }, + { + "name": "plot_loadings_bar", + "line": 270, + "signature": "self, pca_analyzer, pc_idx: int=0, n_top: int=15, save_path: Optional[str]=None", + "returns": [ + "(fig, ax)" + ] + }, + { + "name": "plot_loadings_family_donut", + "line": 316, + "signature": "self, contrib_pc1: pd.DataFrame, contrib_pc2: pd.DataFrame, color_map: dict, save_path: Optional[str]=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_loadings_family_bar", + "line": 341, + "signature": "self, contrib_pc1: pd.DataFrame, contrib_pc2: pd.DataFrame, color_map: dict, save_path: Optional[str]=None", + "returns": [ + "(fig, ax)" + ] + }, + { + "name": "plot_correlation_heatmap", + "line": 418, + "signature": "self, corr_df: pd.DataFrame, save_path: Optional[str]=None, title: str='Corr\u00e9lations PC \u2194 Param\u00e8tres physiques (Spearman)'", + "returns": [ + "(fig, ax)" + ] + }, + { + "name": "plot_embedding", + "line": 491, + "signature": "self, Z: np.ndarray, y: Optional[np.ndarray]=None, color_by: Optional[np.ndarray]=None, color_label: str='', title: str='Embedding 2D', method: str='UMAP', alpha: float=0.5, s: float=3.0, save_path: Optional[str]=None", + "returns": [ + "(fig, ax)" + ] + }, + { + "name": "plot_embedding_grid", + "line": 588, + "signature": "self, Z: np.ndarray, y: np.ndarray, meta: pd.DataFrame, method: str='UMAP', params: Optional[List[str]]=None, s: float=2.5, alpha: float=0.45, save_path: Optional[str]=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_stability", + "line": 712, + "signature": "self, stability_df: pd.DataFrame, save_path: Optional[str]=None", + "returns": [ + "(fig, ax)" + ] + }, + { + "name": "plot_reconstruction_error", + "line": 760, + "signature": "self, recon_df: pd.DataFrame, save_path: Optional[str]=None", + "returns": [ + "(fig, ax)" + ] + }, + { + "name": "plot_eigenspectra", + "line": 810, + "signature": "self, pca_analyzer, wl_grid: np.ndarray, spectral_lines: Optional[dict[str, float]]=None, n_components: int=3, save_path: Optional[str]=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_hr_diagram_embedding", + "line": 892, + "signature": "self, meta: pd.DataFrame, Z: np.ndarray, component: int=0, method: str='UMAP', save_path: Optional[str]=None", + "returns": [ + "(fig, ax)" + ] + }, + { + "name": "_draw_loadings_family_donut", + "line": 950, + "signature": "self, ax, contrib_df, title, color_map", + "returns": [] + }, + { + "name": "_save", + "line": 1001, + "signature": "self, fig: plt.Figure, save_path: Optional[str], default_name: str", + "returns": [ + "None" + ] + }, + { + "name": "plot_training_history", + "line": 1025, + "signature": "self, history, save_path=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_ae_embedding", + "line": 1092, + "signature": "self, Z, meta, y, save_path=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_ae_reconstruction", + "line": 1165, + "signature": "self, X, X_recon, feature_names, n_samples=5, y=None, save_path=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_ae_vs_pca", + "line": 1216, + "signature": "self, comparison_df, save_path=None", + "returns": [ + "(fig, ax)" + ] + }, + { + "name": "plot_latent_interpolation", + "line": 1256, + "signature": "self, Z_interp, X_interp, feature_names, label_a='\u00c9toile A', label_b='\u00c9toile B', save_path=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_ae_error_distribution", + "line": 1315, + "signature": "self, mse_per_sample, y, save_path=None", + "returns": [ + "(fig, ax)" + ] + }, + { + "name": "plot_hdbscan_clusters", + "line": 1352, + "signature": "self, Z: np.ndarray, hdb, y: np.ndarray, save_path=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_hdbscan_hr", + "line": 1471, + "signature": "self, Z: np.ndarray, hdb, meta: 'pd.DataFrame', save_path=None", + "returns": [ + "(fig, axes)", + "(None, None)" + ] + }, + { + "name": "plot_hdbscan_sensitivity", + "line": 1597, + "signature": "self, sensitivity_df: 'pd.DataFrame', min_cluster_val: int=75, pres_cluster_val: int=300, save_path=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_hdbscan_presentation", + "line": 1639, + "signature": "self, Z: np.ndarray, hdb, meta: 'pd.DataFrame', save_path=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_hdbscan_present_split", + "line": 1772, + "signature": "self, Z: np.ndarray, hdb, meta: 'pd.DataFrame', save_path_umap: Optional[str]=None, save_path_hr: Optional[str]=None", + "returns": [ + "(fig_umap, fig_hr)" + ] + }, + { + "name": "plot_hdbscan_feature_heatmap", + "line": 1952, + "signature": "self, cluster_means: 'pd.DataFrame', cluster_labels_aligned: np.ndarray, save_path=None, n_top: int=30", + "returns": [ + "(fig, ax)" + ] + }, + { + "name": "plot_hdbscan_feature_profiles", + "line": 2003, + "signature": "self, cluster_means: 'pd.DataFrame', cluster_labels_aligned: np.ndarray, save_path=None, n_show: int=12", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_xgboost_umap", + "line": 2055, + "signature": "self, Z_umap_aligned: np.ndarray, y_pred: np.ndarray, confidence: np.ndarray, cl_aligned: np.ndarray, color_map: dict, save_path=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_fg_confusion", + "line": 2162, + "signature": "self, Z_umap_aligned: np.ndarray, y_pred: np.ndarray, save_path=None", + "returns": [ + "(fig, ax)", + "(None, None)" + ] + }, + { + "name": "plot_trustworthiness", + "line": 2214, + "signature": "self, X_ref: np.ndarray, Z_umap: np.ndarray, Z_tsne: np.ndarray, save_path=None, k_values=None, n_subsample: int=5000", + "returns": [ + "(fig, ax)" + ] + }, + { + "name": "plot_latent_zoomed", + "line": 2288, + "signature": "self, Z_ae: np.ndarray, y: np.ndarray, meta: 'pd.DataFrame', save_path=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_latent_kde", + "line": 2390, + "signature": "self, Z_ae: np.ndarray, y: np.ndarray, meta: 'pd.DataFrame', save_path=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_ae_recon_by_spectral_type", + "line": 2527, + "signature": "self, X: np.ndarray, X_recon: np.ndarray, spectral_types: np.ndarray, feature_names: list, save_path=None", + "returns": [ + "(fig, axes)", + "(None, None)", + "(None, None)" + ] + }, + { + "name": "plot_ae_error_by_family", + "line": 2672, + "signature": "self, X: np.ndarray, X_recon: np.ndarray, feature_names: list, pca_analyzer=None, save_path=None", + "returns": [ + "(fig, axes)", + "'Autres'", + "fam" + ] + }, + { + "name": "plot_ae_error_distribution_logscale", + "line": 2801, + "signature": "self, mse_per_sample: np.ndarray, y: np.ndarray, save_path=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_synthesis_grid", + "line": 2863, + "signature": "self, Z_ae: np.ndarray, y: np.ndarray, meta: 'pd.DataFrame', scores_pca: np.ndarray, Z_umap: Optional[np.ndarray]=None, save_path=None", + "returns": [ + "fig" + ] + }, + { + "name": "plot_hr_teff_regions", + "line": 2983, + "signature": "self, meta: 'pd.DataFrame', save_path=None", + "returns": [ + "(fig, ax)", + "(None, None)" + ] + } + ], + "observations": [ + { + "case": "KDE_no_stars", + "exception": "ValueError", + "message": "`dataset` input should have multiple elements.", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 215, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 97, in \n lambda points=points, labels=labels, frame=frame: viz.plot_latent_kde(\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 2424, in plot_latent_kde\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\stats\\_kde.py\", line 212, in __init__\n raise ValueError(\"`dataset` input should have multiple elements.\")\nValueError: `dataset` input should have multiple elements.\n", + "warnings": [] + }, + { + "case": "KDE_singleton", + "exception": "ValueError", + "message": "Number of dimensions is greater than number of samples. This results in a singular data covariance matrix, which cannot be treated using the algorithms implemented in `gaussian_kde`. Note that `gaussian_kde` interprets each *column* of `dataset` to be a point; consider transposing the input to `dataset`.", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 215, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 97, in \n lambda points=points, labels=labels, frame=frame: viz.plot_latent_kde(\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 2424, in plot_latent_kde\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\stats\\_kde.py\", line 233, in __init__\n raise ValueError(msg)\nValueError: Number of dimensions is greater than number of samples. This results in a singular data covariance matrix, which cannot be treated using the algorithms implemented in `gaussian_kde`. Note that `gaussian_kde` interprets each *column* of `dataset` to be a point; consider transposing the input to `dataset`.\n", + "warnings": [] + }, + { + "case": "KDE_two_points", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Densit\u00e9 + T_eff", + "xlim": [ + -0.36767059235993405, + 0.9296980539082346 + ], + "ylim": [ + -0.4311102204158015, + 0.8163213139674581 + ], + "lines": 0, + "collections": 3 + }, + { + "title": "Densit\u00e9 + log g", + "xlim": [ + -0.36767059235993405, + 0.9296980539082346 + ], + "ylim": [ + -0.4311102204158015, + 0.8163213139674581 + ], + "lines": 0, + "collections": 3 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 3009.090909090909, + 3445.4545454545455 + ], + "lines": 0, + "collections": 2 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 1.0072727272727273, + 1.3563636363636364 + ], + "lines": 0, + "collections": 2 + } + ] + } + ], + "warnings": [] + }, + { + "case": "KDE_collinear", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Densit\u00e9 + T_eff", + "xlim": [ + -1.5070000000000001, + 12.507000000000001 + ], + "ylim": [ + -1.5070000000000001, + 12.507000000000001 + ], + "lines": 0, + "collections": 3 + }, + { + "title": "Densit\u00e9 + log g", + "xlim": [ + -1.5070000000000001, + 12.507000000000001 + ], + "ylim": [ + -1.5070000000000001, + 12.507000000000001 + ], + "lines": 0, + "collections": 3 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 3100.0, + 7900.0 + ], + "lines": 0, + "collections": 2 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 1.08, + 4.92 + ], + "lines": 0, + "collections": 2 + } + ] + } + ], + "warnings": [] + }, + { + "case": "KDE_NaN_coordinate", + "exception": "ValueError", + "message": "array must not contain infs or NaNs", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 215, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 97, in \n lambda points=points, labels=labels, frame=frame: viz.plot_latent_kde(\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 2424, in plot_latent_kde\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\stats\\_kde.py\", line 236, in __init__\n self.set_bandwidth(bw_method=bw_method)\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\stats\\_kde.py\", line 579, in set_bandwidth\n self._compute_covariance()\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\stats\\_kde.py\", line 591, in _compute_covariance\n self._data_cho_cov = linalg.cholesky(self._data_covariance,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\_lib\\_util.py\", line 1181, in wrapper\n return f(*arrays, *other_args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\linalg\\_decomp_cholesky.py\", line 106, in cholesky\n c, lower = _cholesky(a, lower=lower, overwrite_a=overwrite_a, clean=True,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\linalg\\_decomp_cholesky.py\", line 19, in _cholesky\n a1 = asarray_chkfinite(a) if check_finite else asarray(a)\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\lib\\_function_base_impl.py\", line 673, in asarray_chkfinite\n raise ValueError(\nValueError: array must not contain infs or NaNs\n", + "warnings": [] + }, + { + "case": "KDE_Inf_coordinate", + "exception": "ValueError", + "message": "array must not contain infs or NaNs", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 215, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 97, in \n lambda points=points, labels=labels, frame=frame: viz.plot_latent_kde(\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 2424, in plot_latent_kde\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\stats\\_kde.py\", line 236, in __init__\n self.set_bandwidth(bw_method=bw_method)\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\stats\\_kde.py\", line 579, in set_bandwidth\n self._compute_covariance()\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\stats\\_kde.py\", line 591, in _compute_covariance\n self._data_cho_cov = linalg.cholesky(self._data_covariance,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\_lib\\_util.py\", line 1181, in wrapper\n return f(*arrays, *other_args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\linalg\\_decomp_cholesky.py\", line 106, in cholesky\n c, lower = _cholesky(a, lower=lower, overwrite_a=overwrite_a, clean=True,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\linalg\\_decomp_cholesky.py\", line 19, in _cholesky\n a1 = asarray_chkfinite(a) if check_finite else asarray(a)\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\lib\\_function_base_impl.py\", line 673, in asarray_chkfinite\n raise ValueError(\nValueError: array must not contain infs or NaNs\n", + "warnings": [ + "invalid value encountered in subtract" + ] + }, + { + "case": "KDE_no_physical", + "exception": "ValueError", + "message": "Number of columns must be a positive integer, not 0", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 215, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 97, in \n lambda points=points, labels=labels, frame=frame: viz.plot_latent_kde(\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 2463, in plot_latent_kde\n fig, axes = plt.subplots(1, len(params), figsize=(18, 6), dpi=self.dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py\", line 1887, in subplots\n axs = fig.subplots(nrows=nrows, ncols=ncols, sharex=sharex, sharey=sharey,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py\", line 925, in subplots\n gs = self.add_gridspec(nrows, ncols, figure=self, **gridspec_kw)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py\", line 1608, in add_gridspec\n gs = GridSpec(nrows=nrows, ncols=ncols, figure=self, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\gridspec.py\", line 364, in __init__\n super().__init__(nrows, ncols,\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\gridspec.py\", line 52, in __init__\n raise ValueError(\nValueError: Number of columns must be a positive integer, not 0\n", + "warnings": [] + }, + { + "case": "KDE_all_missing_physical", + "exception": "IndexError", + "message": "index -1 is out of bounds for axis 0 with size 0", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 215, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 97, in \n lambda points=points, labels=labels, frame=frame: viz.plot_latent_kde(\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 2505, in plot_latent_kde\n vmin=float(np.percentile(P_v, 2)),\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\lib\\_function_base_impl.py\", line 4246, in percentile\n return _quantile_unchecked(\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\lib\\_function_base_impl.py\", line 4510, in _quantile_unchecked\n return _ureduce(a,\n ^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\lib\\_function_base_impl.py\", line 3880, in _ureduce\n r = func(a, **kwargs)\n ^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\lib\\_function_base_impl.py\", line 4669, in _quantile_ureduce_func\n result = _quantile(arr,\n ^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\lib\\_function_base_impl.py\", line 4793, in _quantile\n slices_having_nans = np.isnan(arr[-1, ...])\n ~~~^^^^^^^^^\nIndexError: index -1 is out of bounds for axis 0 with size 0\n", + "warnings": [] + }, + { + "case": "plot_embedding_all_missing", + "exception": "IndexError", + "message": "index -1 is out of bounds for axis 0 with size 0", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 215, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 111, in call\n return {\n ^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 112, in \n \"plot_embedding\": lambda: viz.plot_embedding(\n ^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 564, in plot_embedding\n vmin=np.percentile(color_by[valid], 2),\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\lib\\_function_base_impl.py\", line 4246, in percentile\n return _quantile_unchecked(\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\lib\\_function_base_impl.py\", line 4510, in _quantile_unchecked\n return _ureduce(a,\n ^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\lib\\_function_base_impl.py\", line 3880, in _ureduce\n r = func(a, **kwargs)\n ^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\lib\\_function_base_impl.py\", line 4669, in _quantile_ureduce_func\n result = _quantile(arr,\n ^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\lib\\_function_base_impl.py\", line 4793, in _quantile\n slices_having_nans = np.isnan(arr[-1, ...])\n ~~~^^^^^^^^^\nIndexError: index -1 is out of bounds for axis 0 with size 0\n", + "warnings": [] + }, + { + "case": "plot_embedding_grid_all_missing", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Type spectral (LAMOST)", + "xlim": [ + -1.3584761990888259, + 1.7857895917508189 + ], + "ylim": [ + -2.3883543552686444, + 2.203509733591637 + ], + "lines": 0, + "collections": 1 + }, + { + "title": "$T_{\\rm eff}$ (K)", + "xlim": [ + -1.3584761990888259, + 1.7857895917508189 + ], + "ylim": [ + -2.3883543552686444, + 2.203509733591637 + ], + "lines": 0, + "collections": 2 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + -0.1, + 0.1 + ], + "lines": 0, + "collections": 2 + } + ] + } + ], + "warnings": [ + "All-NaN slice encountered", + "All-NaN slice encountered" + ] + }, + { + "case": "plot_ae_embedding_all_missing", + "exception": "TypeError", + "message": "cannot unpack non-iterable numpy.float64 object", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 215, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 111, in call\n return {\n ^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 116, in \n \"plot_ae_embedding\": lambda: viz.plot_ae_embedding(Z, missing, y),\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 1136, in plot_ae_embedding\n vmin, vmax = np.nanpercentile(vals[valid], [2, 98])\n ^^^^^^^^^^\nTypeError: cannot unpack non-iterable numpy.float64 object\n", + "warnings": [ + "Mean of empty slice" + ] + }, + { + "case": "plot_latent_zoomed_all_missing", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Type spectral", + "xlim": [ + -1.4921400736875274, + 1.8767081923167024 + ], + "ylim": [ + -2.5454256739457644, + 2.3585051129440853 + ], + "lines": 0, + "collections": 1 + }, + { + "title": "T_eff (K)", + "xlim": [ + -1.4921400736875274, + 1.8767081923167024 + ], + "ylim": [ + -2.5454256739457644, + 2.3585051129440853 + ], + "lines": 0, + "collections": 2 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + -0.1, + 0.1 + ], + "lines": 0, + "collections": 2 + } + ] + } + ], + "warnings": [ + "Mean of empty slice", + "Mean of empty slice" + ] + }, + { + "case": "plot_synthesis_grid_all_missing", + "result_type": "Figure", + "figures": [ + { + "axes": [ + { + "title": "Classe spectrale", + "xlim": [ + -1.3584761990888259, + 1.7857895917508189 + ], + "ylim": [ + -2.3883543552686444, + 2.203509733591637 + ], + "lines": 0, + "collections": 1 + }, + { + "title": "T_eff (K)", + "xlim": [ + -1.3584761990888259, + 1.7857895917508189 + ], + "ylim": [ + -2.3883543552686444, + 2.203509733591637 + ], + "lines": 0, + "collections": 2 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + -0.1, + 0.1 + ], + "lines": 0, + "collections": 2 + }, + { + "title": "[Fe/H]", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + }, + { + "title": "", + "xlim": [ + -1.3584761990888259, + 1.7857895917508189 + ], + "ylim": [ + -2.3883543552686444, + 2.203509733591637 + ], + "lines": 0, + "collections": 1 + }, + { + "title": "", + "xlim": [ + -1.3584761990888259, + 1.7857895917508189 + ], + "ylim": [ + -2.3883543552686444, + 2.203509733591637 + ], + "lines": 0, + "collections": 2 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + -0.1, + 0.1 + ], + "lines": 0, + "collections": 2 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + } + ] + } + ], + "warnings": [ + "Mean of empty slice", + "Mean of empty slice", + "Mean of empty slice", + "Mean of empty slice" + ] + }, + { + "case": "HR_empty", + "exception": "ValueError", + "message": "Axis limits cannot be NaN or Inf", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 215, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 129, in \n add(\"HR_\" + label, lambda frame=frame: viz.plot_hr_teff_regions(frame))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 3205, in plot_hr_teff_regions\n ax.set_xlim(T_HI + T_PAD * 5, T_LO - T_PAD * 5)\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py\", line 3992, in set_xlim\n return self.xaxis._set_lim(left, right, emit=emit, auto=auto)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axis.py\", line 1263, in _set_lim\n v0 = self.axes._validate_converted_limits(v0, self.convert_units)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py\", line 3913, in _validate_converted_limits\n raise ValueError(\"Axis limits cannot be NaN or Inf\")\nValueError: Axis limits cannot be NaN or Inf\n", + "warnings": [ + "Mean of empty slice", + "Mean of empty slice", + "Mean of empty slice", + "Mean of empty slice", + "Mean of empty slice", + "Mean of empty slice" + ] + }, + { + "case": "HR_all_missing", + "exception": "ValueError", + "message": "Axis limits cannot be NaN or Inf", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 215, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 129, in \n add(\"HR_\" + label, lambda frame=frame: viz.plot_hr_teff_regions(frame))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 3205, in plot_hr_teff_regions\n ax.set_xlim(T_HI + T_PAD * 5, T_LO - T_PAD * 5)\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py\", line 3992, in set_xlim\n return self.xaxis._set_lim(left, right, emit=emit, auto=auto)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axis.py\", line 1263, in _set_lim\n v0 = self.axes._validate_converted_limits(v0, self.convert_units)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py\", line 3913, in _validate_converted_limits\n raise ValueError(\"Axis limits cannot be NaN or Inf\")\nValueError: Axis limits cannot be NaN or Inf\n", + "warnings": [ + "Mean of empty slice", + "Mean of empty slice", + "Mean of empty slice", + "Mean of empty slice", + "Mean of empty slice", + "Mean of empty slice" + ] + }, + { + "case": "HR_singleton", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Diagramme de Hertzsprung-Russell\nLAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles", + "xlim": [ + 2850.0, + 3150.0 + ], + "ylim": [ + 0.95, + 1.05 + ], + "lines": 0, + "collections": 1 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 2700.0, + 3300.0 + ], + "lines": 0, + "collections": 2 + } + ] + } + ], + "warnings": [ + "Attempting to set identical low and high xlims makes transformation singular; automatically expanding.", + "Attempting to set identical low and high ylims makes transformation singular; automatically expanding." + ] + }, + { + "case": "log_MSE_all_zero", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "\u00c9chelle lin\u00e9aire (P99 \u00e9toiles)", + "xlim": [ + -0.05500000000000001, + 0.05500000000000001 + ], + "ylim": [ + -0.05500000000000001, + 0.05500000000000001 + ], + "lines": 1, + "collections": 0 + }, + { + "title": "\u00c9chelle logarithmique (toutes classes)", + "xlim": [ + 8.912509381337387e-18, + 1.122018454301959e-16 + ], + "ylim": [ + -0.05500000000000001, + 0.05500000000000001 + ], + "lines": 1, + "collections": 0 + } + ] + } + ], + "warnings": [ + "divide by zero encountered in divide", + "invalid value encountered in divide", + "invalid value encountered in dot", + "invalid value encountered in divide" + ] + }, + { + "case": "log_MSE_negative", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "\u00c9chelle lin\u00e9aire (P99 \u00e9toiles)", + "xlim": [ + -0.6667500000000001, + 14.001750000000001 + ], + "ylim": [ + 0.0, + 0.4645669291338592 + ], + "lines": 1, + "collections": 0 + }, + { + "title": "\u00c9chelle logarithmique (toutes classes)", + "xlim": [ + 5.6234132519034893e-05, + 17.782794100389236 + ], + "ylim": [ + 0.0, + 0.5629898488870896 + ], + "lines": 1, + "collections": 0 + } + ] + } + ], + "warnings": [] + }, + { + "case": "log_MSE_NaN", + "exception": "ValueError", + "message": "Data cannot be log-scaled because all values are <= 0.", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 215, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 139, in \n lambda errors=errors: viz.plot_ae_error_distribution_logscale(errors, y),\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 2859, in plot_ae_error_distribution_logscale\n plt.tight_layout()\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py\", line 2992, in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py\", line 3665, in tight_layout\n engine.execute(self)\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py\", line 188, in execute\n kwargs = get_tight_layout_figure(\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py\", line 266, in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py\", line 82, in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py\", line 1485, in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py\", line 4763, in get_tightbbox\n ba = martist._get_tightbbox_for_layout_only(axis, renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py\", line 1485, in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axis.py\", line 1425, in get_tightbbox\n ticks_to_draw = self._update_ticks()\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axis.py\", line 1344, in _update_ticks\n major_locs = self.get_majorticklocs()\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axis.py\", line 1673, in get_majorticklocs\n return self.major.locator()\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\ticker.py\", line 2470, in __call__\n return self.tick_values(vmin, vmax)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\ticker.py\", line 2492, in tick_values\n raise ValueError(\nValueError: Data cannot be log-scaled because all values are <= 0.\n", + "warnings": [] + }, + { + "case": "log_MSE_Inf", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "\u00c9chelle lin\u00e9aire (P99 \u00e9toiles)", + "xlim": [ + 6.236999999999998, + 6.962999999999999 + ], + "ylim": [ + -0.05500000000000001, + 0.05500000000000001 + ], + "lines": 1, + "collections": 0 + }, + { + "title": "\u00c9chelle logarithmique (toutes classes)", + "xlim": [ + 0.8912509381337456, + 11.220184543019636 + ], + "ylim": [ + -0.05500000000000001, + 0.05500000000000001 + ], + "lines": 1, + "collections": 0 + } + ] + } + ], + "warnings": [ + "invalid value encountered in subtract", + "invalid value encountered in multiply", + "invalid value encountered in subtract", + "invalid value encountered in subtract" + ] + }, + { + "case": "log_MSE_tiny_positive", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "\u00c9chelle lin\u00e9aire (P99 \u00e9toiles)", + "xlim": [ + -7.032122805689355e-08, + 1.4767457891947646e-06 + ], + "ylim": [ + 0.0, + 25694588.24777838 + ], + "lines": 1, + "collections": 0 + }, + { + "title": "\u00c9chelle logarithmique (toutes classes)", + "xlim": [ + 8.912509381337412e-09, + 1.1220184543019622e-07 + ], + "ylim": [ + -0.05500000000000001, + 0.05500000000000001 + ], + "lines": 1, + "collections": 0 + } + ] + } + ], + "warnings": [ + "invalid value encountered in divide" + ] + }, + { + "case": "reconstruction_n0", + "exception": "ValueError", + "message": "Number of rows must be a positive integer, not 0", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 215, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 144, in \n lambda n=n: viz.plot_ae_reconstruction(Z, Z + 1, [\"a\", \"b\"], n_samples=n),\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 1173, in plot_ae_reconstruction\n fig, axes = plt.subplots(\n ^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py\", line 1887, in subplots\n axs = fig.subplots(nrows=nrows, ncols=ncols, sharex=sharex, sharey=sharey,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py\", line 925, in subplots\n gs = self.add_gridspec(nrows, ncols, figure=self, **gridspec_kw)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py\", line 1608, in add_gridspec\n gs = GridSpec(nrows=nrows, ncols=ncols, figure=self, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\gridspec.py\", line 364, in __init__\n super().__init__(nrows, ncols,\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\gridspec.py\", line 49, in __init__\n raise ValueError(\nValueError: Number of rows must be a positive integer, not 0\n", + "warnings": [] + }, + { + "case": "reconstruction_n-1", + "exception": "ValueError", + "message": "negative dimensions are not allowed", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 215, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 144, in \n lambda n=n: viz.plot_ae_reconstruction(Z, Z + 1, [\"a\", \"b\"], n_samples=n),\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 1172, in plot_ae_reconstruction\n idx = rng.choice(len(X), size=min(n_samples, len(X)), replace=False)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"numpy/random/_generator.pyx\", line 920, in numpy.random._generator.Generator.choice\nValueError: negative dimensions are not allowed\n", + "warnings": [] + }, + { + "case": "reconstruction_n20", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Spectre #2 | MSE = 1.00000", + "xlim": [ + -0.05, + 1.05 + ], + "ylim": [ + -1.289655234175141, + 2.0014727648666217 + ], + "lines": 2, + "collections": 1 + }, + { + "title": "Spectre #5 | MSE = 1.00000", + "xlim": [ + -0.05, + 1.05 + ], + "ylim": [ + -1.0291990864417548, + 0.7823976063811758 + ], + "lines": 2, + "collections": 1 + }, + { + "title": "Spectre #9 | MSE = 1.00000", + "xlim": [ + -0.05, + 1.05 + ], + "ylim": [ + 0.6420020134174822, + 3.106826096987536 + ], + "lines": 2, + "collections": 1 + }, + { + "title": "Spectre #1 | MSE = 1.00000", + "xlim": [ + -0.05, + 1.05 + ], + "ylim": [ + 0.6267780256406745, + 1.845585435838436 + ], + "lines": 2, + "collections": 1 + }, + { + "title": "Spectre #4 | MSE = 1.00000", + "xlim": [ + -0.05, + 1.05 + ], + "ylim": [ + -1.1620064206395782, + 0.5065265148193921 + ], + "lines": 2, + "collections": 1 + }, + { + "title": "Spectre #0 | MSE = 1.00000", + "xlim": [ + -0.05, + 1.05 + ], + "ylim": [ + -0.35040775048885, + 0.8252828441096967 + ], + "lines": 2, + "collections": 1 + }, + { + "title": "Spectre #3 | MSE = 1.00000", + "xlim": [ + -0.05, + 1.05 + ], + "ylim": [ + -1.3332738790313339, + 1.2565408705434888 + ], + "lines": 2, + "collections": 1 + }, + { + "title": "Spectre #10 | MSE = 1.00000", + "xlim": [ + -0.05, + 1.05 + ], + "ylim": [ + -0.7315800779749745, + 1.1689115078400798 + ], + "lines": 2, + "collections": 1 + }, + { + "title": "Spectre #6 | MSE = 1.00000", + "xlim": [ + -0.05, + 1.05 + ], + "ylim": [ + -1.5142795691330018, + 0.9953333376121217 + ], + "lines": 2, + "collections": 1 + }, + { + "title": "Spectre #7 | MSE = 1.00000", + "xlim": [ + -0.05, + 1.05 + ], + "ylim": [ + -1.231565390892273, + 1.3354807876132873 + ], + "lines": 2, + "collections": 1 + }, + { + "title": "Spectre #8 | MSE = 1.00000", + "xlim": [ + -0.05, + 1.05 + ], + "ylim": [ + -0.24988892307319632, + 2.29321281573766 + ], + "lines": 2, + "collections": 1 + }, + { + "title": "Spectre #11 | MSE = 1.00000", + "xlim": [ + -0.05, + 1.05 + ], + "ylim": [ + -2.420758344308468, + 2.8839935034279445 + ], + "lines": 2, + "collections": 1 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + } + ] + } + ], + "warnings": [] + }, + { + "case": "trust_k0", + "exception": "InvalidParameterError", + "message": "The 'n_neighbors' parameter of trustworthiness must be an int in the range [1, inf). Got 0 instead.", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 215, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 147, in \n add(f\"trust_k{k}\", lambda k=k: viz.plot_trustworthiness(Z, Z, Z, k_values=[k]))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 2243, in plot_trustworthiness\n tu = trustworthiness(X_sub, Zu_sub, n_neighbors=k, metric=\"euclidean\")\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\sklearn\\utils\\_param_validation.py\", line 208, in wrapper\n validate_parameter_constraints(\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\sklearn\\utils\\_param_validation.py\", line 98, in validate_parameter_constraints\n raise InvalidParameterError(\nsklearn.utils._param_validation.InvalidParameterError: The 'n_neighbors' parameter of trustworthiness must be an int in the range [1, inf). Got 0 instead.\n", + "warnings": [] + }, + { + "case": "trust_k-1", + "exception": "InvalidParameterError", + "message": "The 'n_neighbors' parameter of trustworthiness must be an int in the range [1, inf). Got -1 instead.", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 215, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 147, in \n add(f\"trust_k{k}\", lambda k=k: viz.plot_trustworthiness(Z, Z, Z, k_values=[k]))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 2243, in plot_trustworthiness\n tu = trustworthiness(X_sub, Zu_sub, n_neighbors=k, metric=\"euclidean\")\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\sklearn\\utils\\_param_validation.py\", line 208, in wrapper\n validate_parameter_constraints(\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\sklearn\\utils\\_param_validation.py\", line 98, in validate_parameter_constraints\n raise InvalidParameterError(\nsklearn.utils._param_validation.InvalidParameterError: The 'n_neighbors' parameter of trustworthiness must be an int in the range [1, inf). Got -1 instead.\n", + "warnings": [] + }, + { + "case": "trust_k1", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Fid\u00e9lit\u00e9 de voisinage \u2014 UMAP vs t-SNE\nLAMOST DR5 \u00b7 12 spectres \u00b7 entr\u00e9e : 2 PCs", + "xlim": [ + 0.945, + 1.0550000000000002 + ], + "ylim": [ + 0.75, + 1.01 + ], + "lines": 3, + "collections": 1 + } + ] + } + ], + "warnings": [] + }, + { + "case": "trust_k6", + "exception": "ValueError", + "message": "n_neighbors (6) should be less than n_samples / 2 (6.0)", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 215, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 147, in \n add(f\"trust_k{k}\", lambda k=k: viz.plot_trustworthiness(Z, Z, Z, k_values=[k]))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 2243, in plot_trustworthiness\n tu = trustworthiness(X_sub, Zu_sub, n_neighbors=k, metric=\"euclidean\")\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\sklearn\\utils\\_param_validation.py\", line 218, in wrapper\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\sklearn\\manifold\\_t_sne.py\", line 523, in trustworthiness\n raise ValueError(\nValueError: n_neighbors (6) should be less than n_samples / 2 (6.0)\n", + "warnings": [] + }, + { + "case": "trust_k12", + "exception": "ValueError", + "message": "n_neighbors (12) should be less than n_samples / 2 (6.0)", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 215, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 147, in \n add(f\"trust_k{k}\", lambda k=k: viz.plot_trustworthiness(Z, Z, Z, k_values=[k]))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 2243, in plot_trustworthiness\n tu = trustworthiness(X_sub, Zu_sub, n_neighbors=k, metric=\"euclidean\")\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\sklearn\\utils\\_param_validation.py\", line 218, in wrapper\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\sklearn\\manifold\\_t_sne.py\", line 523, in trustworthiness\n raise ValueError(\nValueError: n_neighbors (12) should be less than n_samples / 2 (6.0)\n", + "warnings": [] + }, + { + "case": "stability_rows0", + "exception": "IndexError", + "message": "single positional indexer is out-of-bounds", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 215, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 156, in \n add(f\"stability_rows{count}\", lambda frame=frame: viz.plot_stability(frame))\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 726, in plot_stability\n method = stability_df[\"method\"].iloc[0]\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\pandas\\core\\indexing.py\", line 1342, in __getitem__\n return self._getitem_axis(maybe_callable, axis=axis)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\pandas\\core\\indexing.py\", line 2432, in _getitem_axis\n self._validate_integer(key, axis)\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\pandas\\core\\indexing.py\", line 2365, in _validate_integer\n raise IndexError(\"single positional indexer is out-of-bounds\")\nIndexError: single positional indexer is out-of-bounds\n", + "warnings": [] + }, + { + "case": "stability_rows1", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Stabilit\u00e9 de l'embedding UMAP (analyse multi-seeds)", + "xlim": [ + -0.32999999999999996, + 0.32999999999999996 + ], + "ylim": [ + -0.05500000000000001, + 0.05500000000000001 + ], + "lines": 1, + "collections": 0 + } + ] + } + ], + "warnings": [] + }, + { + "case": "stability_rows7", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Stabilit\u00e9 de l'embedding UMAP (analyse multi-seeds)", + "xlim": [ + -0.63, + 6.63 + ], + "ylim": [ + 0.0, + 0.63 + ], + "lines": 1, + "collections": 0 + } + ] + } + ], + "warnings": [] + }, + { + "case": "history_empty", + "exception": "ValueError", + "message": "attempt to get argmin of an empty sequence", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 215, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 164, in \n lambda history=history: viz.plot_training_history(history),\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 1048, in plot_training_history\n best_epoch = int(np.argmin(val_loss)) + 1\n ^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\_core\\fromnumeric.py\", line 1414, in argmin\n return _wrapfunc(a, 'argmin', axis=axis, out=out, **kwds)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\_core\\fromnumeric.py\", line 51, in _wrapfunc\n return _wrapit(obj, method, *args, **kwds)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\_core\\fromnumeric.py\", line 43, in _wrapit\n result = getattr(arr, method)(*args, **kwds)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nValueError: attempt to get argmin of an empty sequence\n", + "warnings": [] + }, + { + "case": "history_mismatched", + "exception": "ValueError", + "message": "x and y must have same first dimension, but have shapes (2,) and (1,)", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 215, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 164, in \n lambda history=history: viz.plot_training_history(history),\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 1046, in plot_training_history\n ax.plot(epochs, val_loss, color=\"#DD8452\", lw=2, ls=\"--\", label=\"Validation\")\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_axes.py\", line 1792, in plot\n lines = [*self._get_lines(self, *args, data=data, **kwargs)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py\", line 331, in __call__\n yield from self._plot_args(\n ^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py\", line 509, in _plot_args\n raise ValueError(f\"x and y must have same first dimension, but \"\nValueError: x and y must have same first dimension, but have shapes (2,) and (1,)\n", + "warnings": [] + }, + { + "case": "history_NaN", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Courbe d'apprentissage \u2014 Autoencodeur", + "xlim": [ + 0.95, + 2.05 + ], + "ylim": [ + 0.9659363289248456, + 2.070529847682755 + ], + "lines": 3, + "collections": 0 + } + ] + } + ], + "warnings": [] + }, + { + "case": "embedding_length", + "exception": "IndexError", + "message": "boolean index did not match indexed array along axis 0; size of axis is 12 but size of corresponding boolean axis is 5", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 215, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 166, in \n add(\"embedding_length\", lambda: viz.plot_embedding(Z, y=y[:5]))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 530, in plot_embedding\n Z[mask, 0],\n ~^^^^^^^^^\nIndexError: boolean index did not match indexed array along axis 0; size of axis is 12 but size of corresponding boolean axis is 5\n", + "warnings": [] + }, + { + "case": "family_zero_weights", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Contribution par famille spectroscopique \u2014 PC1 vs PC2\n(opaque = PC1, hachur\u00e9 = PC2)", + "xlim": [ + -0.43499999999999994, + 1.4349999999999998 + ], + "ylim": [ + -0.05, + 0.05 + ], + "lines": 0, + "collections": 0 + } + ] + } + ], + "warnings": [ + "Attempting to set identical low and high ylims makes transformation singular; automatically expanding." + ] + }, + { + "case": "family_donut_zero", + "exception": "ValueError", + "message": "All wedge sizes are zero", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 215, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 177, in \n lambda: viz.plot_loadings_family_donut(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 327, in plot_loadings_family_donut\n self._draw_loadings_family_donut(axes[0], contrib_pc1, \"PC1\", color_map)\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 956, in _draw_loadings_family_donut\n _, _, autotexts = ax.pie(\n ^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_api\\deprecation.py\", line 477, in wrapper\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\__init__.py\", line 1531, in inner\n return func(\n ^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_axes.py\", line 3667, in pie\n raise ValueError('All wedge sizes are zero')\nValueError: All wedge sizes are zero\n", + "warnings": [] + }, + { + "case": "eigenspectra_default_lines", + "exception": "ValueError", + "message": "\nH$\\\\alpha$\n ^\nParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 215, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 189, in \n lambda: viz.plot_eigenspectra(\n ^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 884, in plot_eigenspectra\n plt.tight_layout()\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py\", line 2992, in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py\", line 3665, in tight_layout\n engine.execute(self)\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py\", line 188, in execute\n kwargs = get_tight_layout_figure(\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py\", line 266, in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py\", line 82, in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py\", line 1485, in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py\", line 4788, in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py\", line 1091, in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py\", line 393, in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py\", line 1076, in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py\", line 479, in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py\", line 59, in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py\", line 125, in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py\", line 259, in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py\", line 86, in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py\", line 100, in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py\", line 2350, in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nValueError: \nH$\\\\alpha$\n ^\nParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n", + "warnings": [] + }, + { + "case": "confidence_negative", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Pr\u00e9dictions XGBoost", + "xlim": [ + -1.3584761990888259, + 1.7857895917508189 + ], + "ylim": [ + -2.3883543552686444, + 2.203509733591637 + ], + "lines": 0, + "collections": 1 + }, + { + "title": "Confiance XGBoost (P_max)", + "xlim": [ + -1.3584761990888259, + 1.7857895917508189 + ], + "ylim": [ + -2.3883543552686444, + 2.203509733591637 + ], + "lines": 0, + "collections": 1 + }, + { + "title": "Clusters HDBSCAN (r\u00e9f\u00e9rence)", + "xlim": [ + -1.3584761990888259, + 1.7857895917508189 + ], + "ylim": [ + -2.3883543552686444, + 2.203509733591637 + ], + "lines": 0, + "collections": 2 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.4, + 1.0 + ], + "lines": 0, + "collections": 2 + } + ] + } + ], + "warnings": [] + }, + { + "case": "confidence_above_one", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Pr\u00e9dictions XGBoost", + "xlim": [ + -1.3584761990888259, + 1.7857895917508189 + ], + "ylim": [ + -2.3883543552686444, + 2.203509733591637 + ], + "lines": 0, + "collections": 1 + }, + { + "title": "Confiance XGBoost (P_max)", + "xlim": [ + -1.3584761990888259, + 1.7857895917508189 + ], + "ylim": [ + -2.3883543552686444, + 2.203509733591637 + ], + "lines": 0, + "collections": 1 + }, + { + "title": "Clusters HDBSCAN (r\u00e9f\u00e9rence)", + "xlim": [ + -1.3584761990888259, + 1.7857895917508189 + ], + "ylim": [ + -2.3883543552686444, + 2.203509733591637 + ], + "lines": 0, + "collections": 2 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.4, + 1.0 + ], + "lines": 0, + "collections": 2 + } + ] + } + ], + "warnings": [] + }, + { + "case": "confidence_NaN", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Pr\u00e9dictions XGBoost", + "xlim": [ + -1.3584761990888259, + 1.7857895917508189 + ], + "ylim": [ + -2.3883543552686444, + 2.203509733591637 + ], + "lines": 0, + "collections": 1 + }, + { + "title": "Confiance XGBoost (P_max)", + "xlim": [ + -0.05500000000000001, + 0.05500000000000001 + ], + "ylim": [ + -0.05500000000000001, + 0.05500000000000001 + ], + "lines": 0, + "collections": 1 + }, + { + "title": "Clusters HDBSCAN (r\u00e9f\u00e9rence)", + "xlim": [ + -1.3584761990888259, + 1.7857895917508189 + ], + "ylim": [ + -2.3883543552686444, + 2.203509733591637 + ], + "lines": 0, + "collections": 2 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.4, + 1.0 + ], + "lines": 0, + "collections": 2 + } + ] + } + ], + "warnings": [] + }, + { + "case": "confidence_Inf", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Pr\u00e9dictions XGBoost", + "xlim": [ + -1.3584761990888259, + 1.7857895917508189 + ], + "ylim": [ + -2.3883543552686444, + 2.203509733591637 + ], + "lines": 0, + "collections": 1 + }, + { + "title": "Confiance XGBoost (P_max)", + "xlim": [ + -0.05500000000000001, + 0.05500000000000001 + ], + "ylim": [ + -0.05500000000000001, + 0.05500000000000001 + ], + "lines": 0, + "collections": 1 + }, + { + "title": "Clusters HDBSCAN (r\u00e9f\u00e9rence)", + "xlim": [ + -1.3584761990888259, + 1.7857895917508189 + ], + "ylim": [ + -2.3883543552686444, + 2.203509733591637 + ], + "lines": 0, + "collections": 2 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.4, + 1.0 + ], + "lines": 0, + "collections": 2 + } + ] + } + ], + "warnings": [] + }, + { + "case": "confidence_wrong_length", + "exception": "ValueError", + "message": "'c' argument has 5 elements, which is inconsistent with 'x' and 'y' with size 12.", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_axes.py\", line 5154, in _parse_scatter_color_args\n colors = mcolors.to_rgba_array(c)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\colors.py\", line 542, in to_rgba_array\n rgba = np.array([to_rgba(cc) for cc in c])\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\colors.py\", line 542, in \n rgba = np.array([to_rgba(cc) for cc in c])\n ^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\colors.py\", line 353, in to_rgba\n rgba = _to_rgba_no_colorcycle(c, alpha)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\colors.py\", line 428, in _to_rgba_no_colorcycle\n raise ValueError(f\"Invalid RGBA argument: {orig_c!r}\")\nValueError: Invalid RGBA argument: np.float64(0.0)\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 215, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 202, in \n lambda confidence=confidence: viz.plot_xgboost_umap(\n ^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 2095, in plot_xgboost_umap\n sc = ax.scatter(\n ^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_api\\deprecation.py\", line 477, in wrapper\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\__init__.py\", line 1531, in inner\n return func(\n ^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_axes.py\", line 5347, in scatter\n self._parse_scatter_color_args(\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_axes.py\", line 5160, in _parse_scatter_color_args\n raise invalid_shape_exception(c.size, xsize) from err\nValueError: 'c' argument has 5 elements, which is inconsistent with 'x' and 'y' with size 12.\n", + "warnings": [] + } + ], + "static_notebook_calls": [ + { + "notebook": "phy3500_01_pca.ipynb", + "cell_index": 14, + "line": 5, + "call": "viz.plot_variance_explained(pca, threshold=0.95, max_pcs=50, save_path=FIGURES_DIR / 'pca_variance_explained.png')" + }, + { + "notebook": "phy3500_01_pca.ipynb", + "cell_index": 18, + "line": 3, + "call": "viz.plot_loadings_heatmap(pca, n_pcs=10, n_features=25, save_path=FIGURES_DIR / 'pca_loadings_heatmap.png')" + }, + { + "notebook": "phy3500_01_pca.ipynb", + "cell_index": 20, + "line": 2, + "call": "viz.plot_loadings_bar(pca, pc_idx=0, n_top=15, save_path=FIGURES_DIR / 'pca_loadings_pc1.png')" + }, + { + "notebook": "phy3500_01_pca.ipynb", + "cell_index": 20, + "line": 9, + "call": "viz.plot_loadings_bar(pca, pc_idx=1, n_top=15, save_path=FIGURES_DIR / 'pca_loadings_pc2.png')" + }, + { + "notebook": "phy3500_01_pca.ipynb", + "cell_index": 23, + "line": 37, + "call": "viz.plot_loadings_family_donut(contrib_pc1=contrib_pc1, contrib_pc2=contrib_pc2, color_map=color_map, save_path=save_path)" + }, + { + "notebook": "phy3500_01_pca.ipynb", + "cell_index": 23, + "line": 48, + "call": "viz.plot_loadings_family_bar(contrib_pc1=contrib_pc1, contrib_pc2=contrib_pc2, color_map=color_map, save_path=save_path2)" + }, + { + "notebook": "phy3500_01_pca.ipynb", + "cell_index": 27, + "line": 13, + "call": "viz.plot_correlation_heatmap(corr_df, save_path=FIGURES_DIR / 'pca_correlation_heatmap.png')" + }, + { + "notebook": "phy3500_01_pca.ipynb", + "cell_index": 30, + "line": 3, + "call": "viz.plot_embedding(scores[:, :2], y=y, title='Scores PCA \u2014 PC1 vs PC2 (type spectral LAMOST)', method='PCA', s=3, alpha=0.4, save_path=FIGURES_DIR / 'pca_scores_classes.png')" + }, + { + "notebook": "phy3500_01_pca.ipynb", + "cell_index": 32, + "line": 6, + "call": "viz.plot_embedding_grid(scores[mask_star, :2], y=y[mask_star], meta=meta[mask_star].reset_index(drop=True), method='PCA', params=['teff_gspphot', 'logg_gspphot', 'mh_gspphot', 'bp_rp'], s=3, alpha=0.4, save_path=FIGURES_DIR / 'pca_scores_grid.png')" + }, + { + "notebook": "phy3500_01_pca.ipynb", + "cell_index": 38, + "line": 8, + "call": "viz.plot_reconstruction_error(recon_df, save_path=FIGURES_DIR / 'pca_reconstruction_error.png')" + }, + { + "notebook": "phy3500_01_pca.ipynb", + "cell_index": 43, + "line": 15, + "call": "viz.plot_variance_explained(pca_spec, threshold=0.95, save_path=FIGURES_DIR / 'pca_spectra_variance_explained.png')" + }, + { + "notebook": "phy3500_01_pca.ipynb", + "cell_index": 45, + "line": 8, + "call": "viz.plot_eigenspectra(pca_analyzer=pca_spec, wl_grid=spec_loader.wl_grid, spectral_lines=RAIES, n_components=3, save_path=FIGURES_DIR / 'pca_eigenspectra.png')" + }, + { + "notebook": "phy3500_01_pca.ipynb", + "cell_index": 49, + "line": 2, + "call": "viz.plot_hr_diagram_embedding(meta=meta, Z=scores, component=0, method='PCA', save_path=FIGURES_DIR / 'hr_diagram_pca_pc1.png')" + }, + { + "notebook": "phy3500_01_pca.ipynb", + "cell_index": 49, + "line": 9, + "call": "viz.plot_hr_diagram_embedding(meta=meta, Z=scores, component=1, method='PCA', save_path=FIGURES_DIR / 'hr_diagram_pca_pc2.png')" + }, + { + "notebook": "phy3500_02_umap_tsne.ipynb", + "cell_index": 6, + "line": 3, + "call": "viz.plot_embedding(Z_umap, y=y, title='UMAP \u2014 Spectres LAMOST DR5 (n_neighbors=15, min_dist=0.1)', method='UMAP', s=2, alpha=0.45, save_path=FIGURES_DIR / 'umap_classes.png')" + }, + { + "notebook": "phy3500_02_umap_tsne.ipynb", + "cell_index": 9, + "line": 3, + "call": "viz.plot_embedding_grid(Z_umap, y=y, meta=meta, method='UMAP', params=['teff_gspphot', 'logg_gspphot', 'mh_gspphot', 'bp_rp'], s=2, alpha=0.4, save_path=FIGURES_DIR / 'umap_grid.png')" + }, + { + "notebook": "phy3500_02_umap_tsne.ipynb", + "cell_index": 10, + "line": 5, + "call": "_viz_pres.plot_embedding(Z_umap, color_by=teff_vals, color_label='$T_{\\\\rm eff}$ (K)', title='UMAP \u2014 T$_{\\\\rm eff}$ (LAMOST DR5 \u00d7 Gaia DR3)', method='UMAP', s=2, alpha=0.5, save_path=FIGURES_DIR / 'umap_teff.png')" + }, + { + "notebook": "phy3500_02_umap_tsne.ipynb", + "cell_index": 12, + "line": 28, + "call": "viz.plot_hdbscan_clusters(Z_umap, hdb, y, save_path=FIGURES_DIR / 'umap_hdbscan_clusters.png')" + }, + { + "notebook": "phy3500_02_umap_tsne.ipynb", + "cell_index": 12, + "line": 32, + "call": "viz.plot_hdbscan_hr(Z_umap, hdb, meta, save_path=FIGURES_DIR / 'umap_hdbscan_hr.png')" + }, + { + "notebook": "phy3500_02_umap_tsne.ipynb", + "cell_index": 12, + "line": 41, + "call": "viz.plot_hdbscan_sensitivity(df_sens, min_cluster_val=HDBSCAN_MIN_CLUSTER, pres_cluster_val=300, save_path=FIGURES_DIR / 'umap_hdbscan_sensitivity.png')" + }, + { + "notebook": "phy3500_02_umap_tsne.ipynb", + "cell_index": 12, + "line": 49, + "call": "viz.plot_hdbscan_presentation(Z_umap, hdb, meta, save_path=FIGURES_DIR / 'umap_hdbscan_present.png')" + }, + { + "notebook": "phy3500_02_umap_tsne.ipynb", + "cell_index": 14, + "line": 3, + "call": "viz.plot_hdbscan_present_split(Z_umap, hdb, meta=meta, save_path_umap=FIGURES_DIR / 'umap_hdbscan_present_umap.png', save_path_hr=FIGURES_DIR / 'umap_hdbscan_present_hr.png')" + }, + { + "notebook": "phy3500_02_umap_tsne.ipynb", + "cell_index": 15, + "line": 2, + "call": "viz.plot_hr_teff_regions(meta=meta, save_path=FIGURES_DIR / 'hr_teff_regions.png')" + }, + { + "notebook": "phy3500_02_umap_tsne.ipynb", + "cell_index": 18, + "line": 13, + "call": "viz.plot_hdbscan_feature_heatmap(cluster_means, cluster_labels_aligned, save_path=FIGURES_DIR / 'umap_hdbscan_feature_heatmap.png')" + }, + { + "notebook": "phy3500_02_umap_tsne.ipynb", + "cell_index": 18, + "line": 20, + "call": "viz.plot_hdbscan_feature_profiles(cluster_means, cluster_labels_aligned, save_path=FIGURES_DIR / 'umap_hdbscan_feature_profiles.png')" + }, + { + "notebook": "phy3500_02_umap_tsne.ipynb", + "cell_index": 21, + "line": 26, + "call": "viz.plot_xgboost_umap(Z_umap_aligned, y_pred, confidence, cl_aligned, color_map, save_path=FIGURES_DIR / 'umap_xgboost_predictions.png')" + }, + { + "notebook": "phy3500_02_umap_tsne.ipynb", + "cell_index": 21, + "line": 34, + "call": "viz.plot_fg_confusion(Z_umap_aligned, y_pred, save_path=FIGURES_DIR / 'umap_xgboost_FG_confusion.png')" + }, + { + "notebook": "phy3500_02_umap_tsne.ipynb", + "cell_index": 30, + "line": 3, + "call": "viz.plot_embedding_grid(Z_tsne, y=y, meta=meta, method='t-SNE', params=['teff_gspphot', 'logg_gspphot', 'mh_gspphot', 'bp_rp'], s=2, alpha=0.4, save_path=FIGURES_DIR / 'tsne_grid.png')" + }, + { + "notebook": "phy3500_02_umap_tsne.ipynb", + "cell_index": 31, + "line": 4, + "call": "_viz_pres.plot_embedding(Z_tsne, y=y, title='t-SNE \u2014 Spectres LAMOST DR5 (perplexity=30)', method='t-SNE', s=2, alpha=0.45, save_path=FIGURES_DIR / 'tsne_classes.png')" + }, + { + "notebook": "phy3500_02_umap_tsne.ipynb", + "cell_index": 32, + "line": 4, + "call": "_viz_pres.plot_embedding(Z_tsne, color_by=teff_vals, color_label='$T_{\\\\rm eff}$ (K)', title='t-SNE \u2014 T$_{\\\\rm eff}$ (LAMOST DR5 \u00d7 Gaia DR3)', method='t-SNE', s=2, alpha=0.5, save_path=FIGURES_DIR / 'tsne_teff.png')" + }, + { + "notebook": "phy3500_02_umap_tsne.ipynb", + "cell_index": 35, + "line": 7, + "call": "viz.plot_stability(stab_umap, save_path=FIGURES_DIR / 'stability_umap.png')" + }, + { + "notebook": "phy3500_02_umap_tsne.ipynb", + "cell_index": 37, + "line": 3, + "call": "viz.plot_trustworthiness(X_ref=scores_95, Z_umap=Z_umap, Z_tsne=Z_tsne, save_path=FIGURES_DIR / 'umap_trustworthiness.png')" + }, + { + "notebook": "phy3500_02_umap_tsne.ipynb", + "cell_index": 46, + "line": 2, + "call": "viz.plot_hr_diagram_embedding(meta=meta, Z=Z_umap, component=0, method='UMAP', save_path=FIGURES_DIR / 'hr_diagram_umap_ax1.png')" + }, + { + "notebook": "phy3500_02_umap_tsne.ipynb", + "cell_index": 46, + "line": 8, + "call": "viz.plot_hr_diagram_embedding(meta=meta, Z=Z_umap, component=1, method='UMAP', save_path=FIGURES_DIR / 'hr_diagram_umap_ax2.png')" + }, + { + "notebook": "phy3500_02_umap_tsne.ipynb", + "cell_index": 46, + "line": 15, + "call": "viz.plot_hr_diagram_embedding(meta=meta, Z=Z_tsne, component=0, method='t-SNE', save_path=FIGURES_DIR / 'hr_diagram_tsne_ax1.png')" + }, + { + "notebook": "phy3500_03_autoencoder.ipynb", + "cell_index": 13, + "line": 5, + "call": "viz.plot_training_history(history, save_path=FIGURES_DIR / 'ae_training_history.png')" + }, + { + "notebook": "phy3500_03_autoencoder.ipynb", + "cell_index": 16, + "line": 4, + "call": "viz.plot_ae_embedding(Z_ae, meta, y, save_path=FIGURES_DIR / 'ae_latent_grid.png')" + }, + { + "notebook": "phy3500_03_autoencoder.ipynb", + "cell_index": 18, + "line": 3, + "call": "viz.plot_latent_zoomed(Z_ae=Z_ae, y=y, meta=meta, save_path=FIGURES_DIR / 'ae_latent_grid_zoomed.png')" + }, + { + "notebook": "phy3500_03_autoencoder.ipynb", + "cell_index": 20, + "line": 3, + "call": "viz.plot_latent_kde(Z_ae=Z_ae, y=y, meta=meta, save_path=FIGURES_DIR / 'ae_latent_kde.png')" + }, + { + "notebook": "phy3500_03_autoencoder.ipynb", + "cell_index": 27, + "line": 3, + "call": "viz.plot_ae_reconstruction(X, X_recon, feature_names, n_samples=5, y=y, save_path=FIGURES_DIR / 'ae_reconstruction_examples.png')" + }, + { + "notebook": "phy3500_03_autoencoder.ipynb", + "cell_index": 29, + "line": 20, + "call": "viz.plot_ae_recon_by_spectral_type(X=X, X_recon=X_recon, spectral_types=spectral_types, feature_names=feature_names, save_path=FIGURES_DIR / 'ae_recon_by_spectral_type.png')" + }, + { + "notebook": "phy3500_03_autoencoder.ipynb", + "cell_index": 32, + "line": 9, + "call": "viz.plot_ae_vs_pca(comparison_df, save_path=FIGURES_DIR / 'ae_vs_pca_mse.png')" + }, + { + "notebook": "phy3500_03_autoencoder.ipynb", + "cell_index": 35, + "line": 10, + "call": "viz.plot_ae_error_distribution(mse_per, y, save_path=FIGURES_DIR / 'ae_error_distribution.png')" + }, + { + "notebook": "phy3500_03_autoencoder.ipynb", + "cell_index": 37, + "line": 5, + "call": "viz.plot_ae_error_by_family(X=X, X_recon=X_recon, feature_names=feature_names, pca_analyzer=pca, save_path=FIGURES_DIR / 'ae_recon_error_by_family.png')" + }, + { + "notebook": "phy3500_03_autoencoder.ipynb", + "cell_index": 40, + "line": 5, + "call": "viz.plot_ae_error_distribution_logscale(mse_per_sample=mse_per, y=y, save_path=FIGURES_DIR / 'ae_error_distribution_logscale.png')" + }, + { + "notebook": "phy3500_03_autoencoder.ipynb", + "cell_index": 47, + "line": 10, + "call": "viz.plot_latent_interpolation(Z_interp, X_interp, feature_names=feature_names, label_a=label_a, label_b=label_b, save_path=FIGURES_DIR / 'ae_latent_interpolation.png')" + }, + { + "notebook": "phy3500_03_autoencoder.ipynb", + "cell_index": 59, + "line": 3, + "call": "viz.plot_synthesis_grid(Z_ae=Z_ae, y=y, meta=meta, scores_pca=scores_pca, Z_umap=Z_umap if 'Z_umap' in dir() else None, save_path=FIGURES_DIR / 'synthesis_pca_umap_ae.png')" + } + ] +} diff --git a/audit/m28_boundary_results.json b/audit/m28_boundary_results.json new file mode 100644 index 0000000..95f1092 --- /dev/null +++ b/audit/m28_boundary_results.json @@ -0,0 +1,1485 @@ +{ + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "source_sha256": "f77107af006706586a839744fcea8a98656de29677b12d2b67a6971dea739e68", + "backend": "Agg", + "inventory": [ + { + "name": "__init__", + "line": 100, + "signature": "self, figsize: Tuple[float, float]=(9, 6), dpi: int=150, cmap_continuous: str='plasma', output_dir: Optional[str | Path]=None", + "returns": [] + }, + { + "name": "plot_variance_explained", + "line": 121, + "signature": "self, pca_analyzer, threshold: float=0.95, max_pcs: int=50, save_path: Optional[str]=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_loadings_heatmap", + "line": 213, + "signature": "self, pca_analyzer, n_pcs: int=10, n_features: int=30, save_path: Optional[str]=None", + "returns": [ + "(fig, ax)" + ] + }, + { + "name": "plot_loadings_bar", + "line": 270, + "signature": "self, pca_analyzer, pc_idx: int=0, n_top: int=15, save_path: Optional[str]=None", + "returns": [ + "(fig, ax)" + ] + }, + { + "name": "plot_loadings_family_donut", + "line": 316, + "signature": "self, contrib_pc1: pd.DataFrame, contrib_pc2: pd.DataFrame, color_map: dict, save_path: Optional[str]=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_loadings_family_bar", + "line": 341, + "signature": "self, contrib_pc1: pd.DataFrame, contrib_pc2: pd.DataFrame, color_map: dict, save_path: Optional[str]=None", + "returns": [ + "(fig, ax)" + ] + }, + { + "name": "plot_correlation_heatmap", + "line": 418, + "signature": "self, corr_df: pd.DataFrame, save_path: Optional[str]=None, title: str='Corr\u00e9lations PC \u2194 Param\u00e8tres physiques (Spearman)'", + "returns": [ + "(fig, ax)" + ] + }, + { + "name": "plot_embedding", + "line": 491, + "signature": "self, Z: np.ndarray, y: Optional[np.ndarray]=None, color_by: Optional[np.ndarray]=None, color_label: str='', title: str='Embedding 2D', method: str='UMAP', alpha: float=0.5, s: float=3.0, save_path: Optional[str]=None", + "returns": [ + "(fig, ax)" + ] + }, + { + "name": "plot_embedding_grid", + "line": 588, + "signature": "self, Z: np.ndarray, y: np.ndarray, meta: pd.DataFrame, method: str='UMAP', params: Optional[List[str]]=None, s: float=2.5, alpha: float=0.45, save_path: Optional[str]=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_stability", + "line": 712, + "signature": "self, stability_df: pd.DataFrame, save_path: Optional[str]=None", + "returns": [ + "(fig, ax)" + ] + }, + { + "name": "plot_reconstruction_error", + "line": 760, + "signature": "self, recon_df: pd.DataFrame, save_path: Optional[str]=None", + "returns": [ + "(fig, ax)" + ] + }, + { + "name": "plot_eigenspectra", + "line": 810, + "signature": "self, pca_analyzer, wl_grid: np.ndarray, spectral_lines: Optional[dict[str, float]]=None, n_components: int=3, save_path: Optional[str]=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_hr_diagram_embedding", + "line": 892, + "signature": "self, meta: pd.DataFrame, Z: np.ndarray, component: int=0, method: str='UMAP', save_path: Optional[str]=None", + "returns": [ + "(fig, ax)" + ] + }, + { + "name": "_draw_loadings_family_donut", + "line": 950, + "signature": "self, ax, contrib_df, title, color_map", + "returns": [] + }, + { + "name": "_save", + "line": 1001, + "signature": "self, fig: plt.Figure, save_path: Optional[str], default_name: str", + "returns": [ + "None" + ] + }, + { + "name": "plot_training_history", + "line": 1025, + "signature": "self, history, save_path=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_ae_embedding", + "line": 1092, + "signature": "self, Z, meta, y, save_path=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_ae_reconstruction", + "line": 1165, + "signature": "self, X, X_recon, feature_names, n_samples=5, y=None, save_path=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_ae_vs_pca", + "line": 1216, + "signature": "self, comparison_df, save_path=None", + "returns": [ + "(fig, ax)" + ] + }, + { + "name": "plot_latent_interpolation", + "line": 1256, + "signature": "self, Z_interp, X_interp, feature_names, label_a='\u00c9toile A', label_b='\u00c9toile B', save_path=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_ae_error_distribution", + "line": 1315, + "signature": "self, mse_per_sample, y, save_path=None", + "returns": [ + "(fig, ax)" + ] + }, + { + "name": "plot_hdbscan_clusters", + "line": 1352, + "signature": "self, Z: np.ndarray, hdb, y: np.ndarray, save_path=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_hdbscan_hr", + "line": 1471, + "signature": "self, Z: np.ndarray, hdb, meta: 'pd.DataFrame', save_path=None", + "returns": [ + "(fig, axes)", + "(None, None)" + ] + }, + { + "name": "plot_hdbscan_sensitivity", + "line": 1597, + "signature": "self, sensitivity_df: 'pd.DataFrame', min_cluster_val: int=75, pres_cluster_val: int=300, save_path=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_hdbscan_presentation", + "line": 1639, + "signature": "self, Z: np.ndarray, hdb, meta: 'pd.DataFrame', save_path=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_hdbscan_present_split", + "line": 1772, + "signature": "self, Z: np.ndarray, hdb, meta: 'pd.DataFrame', save_path_umap: Optional[str]=None, save_path_hr: Optional[str]=None", + "returns": [ + "(fig_umap, fig_hr)" + ] + }, + { + "name": "plot_hdbscan_feature_heatmap", + "line": 1952, + "signature": "self, cluster_means: 'pd.DataFrame', cluster_labels_aligned: np.ndarray, save_path=None, n_top: int=30", + "returns": [ + "(fig, ax)" + ] + }, + { + "name": "plot_hdbscan_feature_profiles", + "line": 2003, + "signature": "self, cluster_means: 'pd.DataFrame', cluster_labels_aligned: np.ndarray, save_path=None, n_show: int=12", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_xgboost_umap", + "line": 2055, + "signature": "self, Z_umap_aligned: np.ndarray, y_pred: np.ndarray, confidence: np.ndarray, cl_aligned: np.ndarray, color_map: dict, save_path=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_fg_confusion", + "line": 2162, + "signature": "self, Z_umap_aligned: np.ndarray, y_pred: np.ndarray, save_path=None", + "returns": [ + "(fig, ax)", + "(None, None)" + ] + }, + { + "name": "plot_trustworthiness", + "line": 2214, + "signature": "self, X_ref: np.ndarray, Z_umap: np.ndarray, Z_tsne: np.ndarray, save_path=None, k_values=None, n_subsample: int=5000", + "returns": [ + "(fig, ax)" + ] + }, + { + "name": "plot_latent_zoomed", + "line": 2288, + "signature": "self, Z_ae: np.ndarray, y: np.ndarray, meta: 'pd.DataFrame', save_path=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_latent_kde", + "line": 2390, + "signature": "self, Z_ae: np.ndarray, y: np.ndarray, meta: 'pd.DataFrame', save_path=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_ae_recon_by_spectral_type", + "line": 2527, + "signature": "self, X: np.ndarray, X_recon: np.ndarray, spectral_types: np.ndarray, feature_names: list, save_path=None", + "returns": [ + "(fig, axes)", + "(None, None)", + "(None, None)" + ] + }, + { + "name": "plot_ae_error_by_family", + "line": 2672, + "signature": "self, X: np.ndarray, X_recon: np.ndarray, feature_names: list, pca_analyzer=None, save_path=None", + "returns": [ + "(fig, axes)", + "'Autres'", + "fam" + ] + }, + { + "name": "plot_ae_error_distribution_logscale", + "line": 2801, + "signature": "self, mse_per_sample: np.ndarray, y: np.ndarray, save_path=None", + "returns": [ + "(fig, axes)" + ] + }, + { + "name": "plot_synthesis_grid", + "line": 2863, + "signature": "self, Z_ae: np.ndarray, y: np.ndarray, meta: 'pd.DataFrame', scores_pca: np.ndarray, Z_umap: Optional[np.ndarray]=None, save_path=None", + "returns": [ + "fig" + ] + }, + { + "name": "plot_hr_teff_regions", + "line": 2983, + "signature": "self, meta: 'pd.DataFrame', save_path=None", + "returns": [ + "(fig, ax)", + "(None, None)" + ] + } + ], + "observations": [ + { + "case": "KDE_no_stars", + "exception": "ValueError", + "message": "`dataset` input should have multiple elements.", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 183, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 92, in \n lambda points=points, labels=labels, frame=frame: viz.plot_latent_kde(\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 2424, in plot_latent_kde\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\stats\\_kde.py\", line 212, in __init__\n raise ValueError(\"`dataset` input should have multiple elements.\")\nValueError: `dataset` input should have multiple elements.\n", + "warnings": [] + }, + { + "case": "KDE_singleton", + "exception": "ValueError", + "message": "Number of dimensions is greater than number of samples. This results in a singular data covariance matrix, which cannot be treated using the algorithms implemented in `gaussian_kde`. Note that `gaussian_kde` interprets each *column* of `dataset` to be a point; consider transposing the input to `dataset`.", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 183, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 92, in \n lambda points=points, labels=labels, frame=frame: viz.plot_latent_kde(\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 2424, in plot_latent_kde\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\stats\\_kde.py\", line 233, in __init__\n raise ValueError(msg)\nValueError: Number of dimensions is greater than number of samples. This results in a singular data covariance matrix, which cannot be treated using the algorithms implemented in `gaussian_kde`. Note that `gaussian_kde` interprets each *column* of `dataset` to be a point; consider transposing the input to `dataset`.\n", + "warnings": [] + }, + { + "case": "KDE_two_points", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Densit\u00e9 + T_eff", + "xlim": [ + -0.36767059235993405, + 0.9296980539082346 + ], + "ylim": [ + -0.4311102204158015, + 0.8163213139674581 + ], + "lines": 0, + "collections": 3 + }, + { + "title": "Densit\u00e9 + log g", + "xlim": [ + -0.36767059235993405, + 0.9296980539082346 + ], + "ylim": [ + -0.4311102204158015, + 0.8163213139674581 + ], + "lines": 0, + "collections": 3 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 3009.090909090909, + 3445.4545454545455 + ], + "lines": 0, + "collections": 2 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 1.0072727272727273, + 1.3563636363636364 + ], + "lines": 0, + "collections": 2 + } + ] + } + ], + "warnings": [] + }, + { + "case": "KDE_collinear", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Densit\u00e9 + T_eff", + "xlim": [ + -1.5070000000000001, + 12.507000000000001 + ], + "ylim": [ + -1.5070000000000001, + 12.507000000000001 + ], + "lines": 0, + "collections": 3 + }, + { + "title": "Densit\u00e9 + log g", + "xlim": [ + -1.5070000000000001, + 12.507000000000001 + ], + "ylim": [ + -1.5070000000000001, + 12.507000000000001 + ], + "lines": 0, + "collections": 3 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 3100.0, + 7900.0 + ], + "lines": 0, + "collections": 2 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 1.08, + 4.92 + ], + "lines": 0, + "collections": 2 + } + ] + } + ], + "warnings": [] + }, + { + "case": "KDE_NaN_coordinate", + "exception": "ValueError", + "message": "array must not contain infs or NaNs", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 183, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 92, in \n lambda points=points, labels=labels, frame=frame: viz.plot_latent_kde(\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 2424, in plot_latent_kde\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\stats\\_kde.py\", line 236, in __init__\n self.set_bandwidth(bw_method=bw_method)\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\stats\\_kde.py\", line 579, in set_bandwidth\n self._compute_covariance()\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\stats\\_kde.py\", line 591, in _compute_covariance\n self._data_cho_cov = linalg.cholesky(self._data_covariance,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\_lib\\_util.py\", line 1181, in wrapper\n return f(*arrays, *other_args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\linalg\\_decomp_cholesky.py\", line 106, in cholesky\n c, lower = _cholesky(a, lower=lower, overwrite_a=overwrite_a, clean=True,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\linalg\\_decomp_cholesky.py\", line 19, in _cholesky\n a1 = asarray_chkfinite(a) if check_finite else asarray(a)\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\lib\\_function_base_impl.py\", line 673, in asarray_chkfinite\n raise ValueError(\nValueError: array must not contain infs or NaNs\n", + "warnings": [] + }, + { + "case": "KDE_Inf_coordinate", + "exception": "ValueError", + "message": "array must not contain infs or NaNs", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 183, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 92, in \n lambda points=points, labels=labels, frame=frame: viz.plot_latent_kde(\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 2424, in plot_latent_kde\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\stats\\_kde.py\", line 236, in __init__\n self.set_bandwidth(bw_method=bw_method)\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\stats\\_kde.py\", line 579, in set_bandwidth\n self._compute_covariance()\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\stats\\_kde.py\", line 591, in _compute_covariance\n self._data_cho_cov = linalg.cholesky(self._data_covariance,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\_lib\\_util.py\", line 1181, in wrapper\n return f(*arrays, *other_args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\linalg\\_decomp_cholesky.py\", line 106, in cholesky\n c, lower = _cholesky(a, lower=lower, overwrite_a=overwrite_a, clean=True,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\scipy\\linalg\\_decomp_cholesky.py\", line 19, in _cholesky\n a1 = asarray_chkfinite(a) if check_finite else asarray(a)\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\lib\\_function_base_impl.py\", line 673, in asarray_chkfinite\n raise ValueError(\nValueError: array must not contain infs or NaNs\n", + "warnings": [ + "invalid value encountered in subtract" + ] + }, + { + "case": "KDE_no_physical", + "exception": "ValueError", + "message": "Number of columns must be a positive integer, not 0", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 183, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 92, in \n lambda points=points, labels=labels, frame=frame: viz.plot_latent_kde(\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 2463, in plot_latent_kde\n fig, axes = plt.subplots(1, len(params), figsize=(18, 6), dpi=self.dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py\", line 1887, in subplots\n axs = fig.subplots(nrows=nrows, ncols=ncols, sharex=sharex, sharey=sharey,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py\", line 925, in subplots\n gs = self.add_gridspec(nrows, ncols, figure=self, **gridspec_kw)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py\", line 1608, in add_gridspec\n gs = GridSpec(nrows=nrows, ncols=ncols, figure=self, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\gridspec.py\", line 364, in __init__\n super().__init__(nrows, ncols,\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\gridspec.py\", line 52, in __init__\n raise ValueError(\nValueError: Number of columns must be a positive integer, not 0\n", + "warnings": [] + }, + { + "case": "KDE_all_missing_physical", + "exception": "IndexError", + "message": "index -1 is out of bounds for axis 0 with size 0", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 183, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 92, in \n lambda points=points, labels=labels, frame=frame: viz.plot_latent_kde(\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 2505, in plot_latent_kde\n vmin=float(np.percentile(P_v, 2)),\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\lib\\_function_base_impl.py\", line 4246, in percentile\n return _quantile_unchecked(\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\lib\\_function_base_impl.py\", line 4510, in _quantile_unchecked\n return _ureduce(a,\n ^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\lib\\_function_base_impl.py\", line 3880, in _ureduce\n r = func(a, **kwargs)\n ^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\lib\\_function_base_impl.py\", line 4669, in _quantile_ureduce_func\n result = _quantile(arr,\n ^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\lib\\_function_base_impl.py\", line 4793, in _quantile\n slices_having_nans = np.isnan(arr[-1, ...])\n ~~~^^^^^^^^^\nIndexError: index -1 is out of bounds for axis 0 with size 0\n", + "warnings": [] + }, + { + "case": "plot_embedding_all_missing", + "exception": "IndexError", + "message": "index -1 is out of bounds for axis 0 with size 0", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 183, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 106, in call\n return {\n ^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 107, in \n \"plot_embedding\": lambda: viz.plot_embedding(\n ^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 564, in plot_embedding\n vmin=np.percentile(color_by[valid], 2),\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\lib\\_function_base_impl.py\", line 4246, in percentile\n return _quantile_unchecked(\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\lib\\_function_base_impl.py\", line 4510, in _quantile_unchecked\n return _ureduce(a,\n ^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\lib\\_function_base_impl.py\", line 3880, in _ureduce\n r = func(a, **kwargs)\n ^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\lib\\_function_base_impl.py\", line 4669, in _quantile_ureduce_func\n result = _quantile(arr,\n ^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\lib\\_function_base_impl.py\", line 4793, in _quantile\n slices_having_nans = np.isnan(arr[-1, ...])\n ~~~^^^^^^^^^\nIndexError: index -1 is out of bounds for axis 0 with size 0\n", + "warnings": [] + }, + { + "case": "plot_embedding_grid_all_missing", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Type spectral (LAMOST)", + "xlim": [ + -1.3584761990888259, + 1.7857895917508189 + ], + "ylim": [ + -2.3883543552686444, + 2.203509733591637 + ], + "lines": 0, + "collections": 1 + }, + { + "title": "$T_{\\rm eff}$ (K)", + "xlim": [ + -1.3584761990888259, + 1.7857895917508189 + ], + "ylim": [ + -2.3883543552686444, + 2.203509733591637 + ], + "lines": 0, + "collections": 2 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + -0.1, + 0.1 + ], + "lines": 0, + "collections": 2 + } + ] + } + ], + "warnings": [ + "All-NaN slice encountered", + "All-NaN slice encountered" + ] + }, + { + "case": "plot_ae_embedding_all_missing", + "exception": "TypeError", + "message": "cannot unpack non-iterable numpy.float64 object", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 183, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 106, in call\n return {\n ^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 111, in \n \"plot_ae_embedding\": lambda: viz.plot_ae_embedding(Z, missing, y),\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 1136, in plot_ae_embedding\n vmin, vmax = np.nanpercentile(vals[valid], [2, 98])\n ^^^^^^^^^^\nTypeError: cannot unpack non-iterable numpy.float64 object\n", + "warnings": [ + "Mean of empty slice" + ] + }, + { + "case": "plot_latent_zoomed_all_missing", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Type spectral", + "xlim": [ + -1.4921400736875274, + 1.8767081923167024 + ], + "ylim": [ + -2.5454256739457644, + 2.3585051129440853 + ], + "lines": 0, + "collections": 1 + }, + { + "title": "T_eff (K)", + "xlim": [ + -1.4921400736875274, + 1.8767081923167024 + ], + "ylim": [ + -2.5454256739457644, + 2.3585051129440853 + ], + "lines": 0, + "collections": 2 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + -0.1, + 0.1 + ], + "lines": 0, + "collections": 2 + } + ] + } + ], + "warnings": [ + "Mean of empty slice", + "Mean of empty slice" + ] + }, + { + "case": "plot_synthesis_grid_all_missing", + "result_type": "Figure", + "figures": [ + { + "axes": [ + { + "title": "Classe spectrale", + "xlim": [ + -1.3584761990888259, + 1.7857895917508189 + ], + "ylim": [ + -2.3883543552686444, + 2.203509733591637 + ], + "lines": 0, + "collections": 1 + }, + { + "title": "T_eff (K)", + "xlim": [ + -1.3584761990888259, + 1.7857895917508189 + ], + "ylim": [ + -2.3883543552686444, + 2.203509733591637 + ], + "lines": 0, + "collections": 2 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + -0.1, + 0.1 + ], + "lines": 0, + "collections": 2 + }, + { + "title": "[Fe/H]", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + }, + { + "title": "", + "xlim": [ + -1.3584761990888259, + 1.7857895917508189 + ], + "ylim": [ + -2.3883543552686444, + 2.203509733591637 + ], + "lines": 0, + "collections": 1 + }, + { + "title": "", + "xlim": [ + -1.3584761990888259, + 1.7857895917508189 + ], + "ylim": [ + -2.3883543552686444, + 2.203509733591637 + ], + "lines": 0, + "collections": 2 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + -0.1, + 0.1 + ], + "lines": 0, + "collections": 2 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + } + ] + } + ], + "warnings": [ + "Mean of empty slice", + "Mean of empty slice", + "Mean of empty slice", + "Mean of empty slice" + ] + }, + { + "case": "HR_empty", + "exception": "ValueError", + "message": "Axis limits cannot be NaN or Inf", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 183, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 124, in \n add(\"HR_\" + label, lambda frame=frame: viz.plot_hr_teff_regions(frame))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 3205, in plot_hr_teff_regions\n ax.set_xlim(T_HI + T_PAD * 5, T_LO - T_PAD * 5)\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py\", line 3992, in set_xlim\n return self.xaxis._set_lim(left, right, emit=emit, auto=auto)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axis.py\", line 1263, in _set_lim\n v0 = self.axes._validate_converted_limits(v0, self.convert_units)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py\", line 3913, in _validate_converted_limits\n raise ValueError(\"Axis limits cannot be NaN or Inf\")\nValueError: Axis limits cannot be NaN or Inf\n", + "warnings": [ + "Mean of empty slice", + "Mean of empty slice", + "Mean of empty slice", + "Mean of empty slice", + "Mean of empty slice", + "Mean of empty slice" + ] + }, + { + "case": "HR_all_missing", + "exception": "ValueError", + "message": "Axis limits cannot be NaN or Inf", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 183, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 124, in \n add(\"HR_\" + label, lambda frame=frame: viz.plot_hr_teff_regions(frame))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 3205, in plot_hr_teff_regions\n ax.set_xlim(T_HI + T_PAD * 5, T_LO - T_PAD * 5)\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py\", line 3992, in set_xlim\n return self.xaxis._set_lim(left, right, emit=emit, auto=auto)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axis.py\", line 1263, in _set_lim\n v0 = self.axes._validate_converted_limits(v0, self.convert_units)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py\", line 3913, in _validate_converted_limits\n raise ValueError(\"Axis limits cannot be NaN or Inf\")\nValueError: Axis limits cannot be NaN or Inf\n", + "warnings": [ + "Mean of empty slice", + "Mean of empty slice", + "Mean of empty slice", + "Mean of empty slice", + "Mean of empty slice", + "Mean of empty slice" + ] + }, + { + "case": "HR_singleton", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Diagramme de Hertzsprung-Russell\nLAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles", + "xlim": [ + 2850.0, + 3150.0 + ], + "ylim": [ + 0.95, + 1.05 + ], + "lines": 0, + "collections": 1 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 2700.0, + 3300.0 + ], + "lines": 0, + "collections": 2 + } + ] + } + ], + "warnings": [ + "Attempting to set identical low and high xlims makes transformation singular; automatically expanding.", + "Attempting to set identical low and high ylims makes transformation singular; automatically expanding." + ] + }, + { + "case": "log_MSE_all_zero", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "\u00c9chelle lin\u00e9aire (P99 \u00e9toiles)", + "xlim": [ + -0.05500000000000001, + 0.05500000000000001 + ], + "ylim": [ + -0.05500000000000001, + 0.05500000000000001 + ], + "lines": 1, + "collections": 0 + }, + { + "title": "\u00c9chelle logarithmique (toutes classes)", + "xlim": [ + 8.912509381337387e-18, + 1.122018454301959e-16 + ], + "ylim": [ + -0.05500000000000001, + 0.05500000000000001 + ], + "lines": 1, + "collections": 0 + } + ] + } + ], + "warnings": [ + "divide by zero encountered in divide", + "invalid value encountered in divide", + "invalid value encountered in dot", + "invalid value encountered in divide" + ] + }, + { + "case": "log_MSE_negative", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "\u00c9chelle lin\u00e9aire (P99 \u00e9toiles)", + "xlim": [ + -0.6667500000000001, + 14.001750000000001 + ], + "ylim": [ + 0.0, + 0.4645669291338592 + ], + "lines": 1, + "collections": 0 + }, + { + "title": "\u00c9chelle logarithmique (toutes classes)", + "xlim": [ + 5.6234132519034893e-05, + 17.782794100389236 + ], + "ylim": [ + 0.0, + 0.5629898488870896 + ], + "lines": 1, + "collections": 0 + } + ] + } + ], + "warnings": [] + }, + { + "case": "log_MSE_NaN", + "exception": "ValueError", + "message": "Data cannot be log-scaled because all values are <= 0.", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 183, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 134, in \n lambda errors=errors: viz.plot_ae_error_distribution_logscale(errors, y),\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 2859, in plot_ae_error_distribution_logscale\n plt.tight_layout()\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py\", line 2992, in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py\", line 3665, in tight_layout\n engine.execute(self)\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py\", line 188, in execute\n kwargs = get_tight_layout_figure(\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py\", line 266, in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py\", line 82, in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py\", line 1485, in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py\", line 4763, in get_tightbbox\n ba = martist._get_tightbbox_for_layout_only(axis, renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py\", line 1485, in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axis.py\", line 1425, in get_tightbbox\n ticks_to_draw = self._update_ticks()\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axis.py\", line 1344, in _update_ticks\n major_locs = self.get_majorticklocs()\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axis.py\", line 1673, in get_majorticklocs\n return self.major.locator()\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\ticker.py\", line 2470, in __call__\n return self.tick_values(vmin, vmax)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\ticker.py\", line 2492, in tick_values\n raise ValueError(\nValueError: Data cannot be log-scaled because all values are <= 0.\n", + "warnings": [] + }, + { + "case": "log_MSE_Inf", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "\u00c9chelle lin\u00e9aire (P99 \u00e9toiles)", + "xlim": [ + 6.236999999999998, + 6.962999999999999 + ], + "ylim": [ + -0.05500000000000001, + 0.05500000000000001 + ], + "lines": 1, + "collections": 0 + }, + { + "title": "\u00c9chelle logarithmique (toutes classes)", + "xlim": [ + 0.8912509381337456, + 11.220184543019636 + ], + "ylim": [ + -0.05500000000000001, + 0.05500000000000001 + ], + "lines": 1, + "collections": 0 + } + ] + } + ], + "warnings": [ + "invalid value encountered in subtract", + "invalid value encountered in multiply", + "invalid value encountered in subtract", + "invalid value encountered in subtract" + ] + }, + { + "case": "log_MSE_tiny_positive", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "\u00c9chelle lin\u00e9aire (P99 \u00e9toiles)", + "xlim": [ + -7.032122805689355e-08, + 1.4767457891947646e-06 + ], + "ylim": [ + 0.0, + 25694588.24777838 + ], + "lines": 1, + "collections": 0 + }, + { + "title": "\u00c9chelle logarithmique (toutes classes)", + "xlim": [ + 8.912509381337412e-09, + 1.1220184543019622e-07 + ], + "ylim": [ + -0.05500000000000001, + 0.05500000000000001 + ], + "lines": 1, + "collections": 0 + } + ] + } + ], + "warnings": [ + "invalid value encountered in divide" + ] + }, + { + "case": "reconstruction_n0", + "exception": "ValueError", + "message": "Number of rows must be a positive integer, not 0", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 183, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 139, in \n lambda n=n: viz.plot_ae_reconstruction(Z, Z + 1, [\"a\", \"b\"], n_samples=n),\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 1173, in plot_ae_reconstruction\n fig, axes = plt.subplots(\n ^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py\", line 1887, in subplots\n axs = fig.subplots(nrows=nrows, ncols=ncols, sharex=sharex, sharey=sharey,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py\", line 925, in subplots\n gs = self.add_gridspec(nrows, ncols, figure=self, **gridspec_kw)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py\", line 1608, in add_gridspec\n gs = GridSpec(nrows=nrows, ncols=ncols, figure=self, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\gridspec.py\", line 364, in __init__\n super().__init__(nrows, ncols,\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\gridspec.py\", line 49, in __init__\n raise ValueError(\nValueError: Number of rows must be a positive integer, not 0\n", + "warnings": [] + }, + { + "case": "reconstruction_n-1", + "exception": "ValueError", + "message": "negative dimensions are not allowed", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 183, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 139, in \n lambda n=n: viz.plot_ae_reconstruction(Z, Z + 1, [\"a\", \"b\"], n_samples=n),\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 1172, in plot_ae_reconstruction\n idx = rng.choice(len(X), size=min(n_samples, len(X)), replace=False)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"numpy/random/_generator.pyx\", line 920, in numpy.random._generator.Generator.choice\nValueError: negative dimensions are not allowed\n", + "warnings": [] + }, + { + "case": "reconstruction_n20", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Spectre #2 | MSE = 1.00000", + "xlim": [ + -0.05, + 1.05 + ], + "ylim": [ + -1.289655234175141, + 2.0014727648666217 + ], + "lines": 2, + "collections": 1 + }, + { + "title": "Spectre #5 | MSE = 1.00000", + "xlim": [ + -0.05, + 1.05 + ], + "ylim": [ + -1.0291990864417548, + 0.7823976063811758 + ], + "lines": 2, + "collections": 1 + }, + { + "title": "Spectre #9 | MSE = 1.00000", + "xlim": [ + -0.05, + 1.05 + ], + "ylim": [ + 0.6420020134174822, + 3.106826096987536 + ], + "lines": 2, + "collections": 1 + }, + { + "title": "Spectre #1 | MSE = 1.00000", + "xlim": [ + -0.05, + 1.05 + ], + "ylim": [ + 0.6267780256406745, + 1.845585435838436 + ], + "lines": 2, + "collections": 1 + }, + { + "title": "Spectre #4 | MSE = 1.00000", + "xlim": [ + -0.05, + 1.05 + ], + "ylim": [ + -1.1620064206395782, + 0.5065265148193921 + ], + "lines": 2, + "collections": 1 + }, + { + "title": "Spectre #0 | MSE = 1.00000", + "xlim": [ + -0.05, + 1.05 + ], + "ylim": [ + -0.35040775048885, + 0.8252828441096967 + ], + "lines": 2, + "collections": 1 + }, + { + "title": "Spectre #3 | MSE = 1.00000", + "xlim": [ + -0.05, + 1.05 + ], + "ylim": [ + -1.3332738790313339, + 1.2565408705434888 + ], + "lines": 2, + "collections": 1 + }, + { + "title": "Spectre #10 | MSE = 1.00000", + "xlim": [ + -0.05, + 1.05 + ], + "ylim": [ + -0.7315800779749745, + 1.1689115078400798 + ], + "lines": 2, + "collections": 1 + }, + { + "title": "Spectre #6 | MSE = 1.00000", + "xlim": [ + -0.05, + 1.05 + ], + "ylim": [ + -1.5142795691330018, + 0.9953333376121217 + ], + "lines": 2, + "collections": 1 + }, + { + "title": "Spectre #7 | MSE = 1.00000", + "xlim": [ + -0.05, + 1.05 + ], + "ylim": [ + -1.231565390892273, + 1.3354807876132873 + ], + "lines": 2, + "collections": 1 + }, + { + "title": "Spectre #8 | MSE = 1.00000", + "xlim": [ + -0.05, + 1.05 + ], + "ylim": [ + -0.24988892307319632, + 2.29321281573766 + ], + "lines": 2, + "collections": 1 + }, + { + "title": "Spectre #11 | MSE = 1.00000", + "xlim": [ + -0.05, + 1.05 + ], + "ylim": [ + -2.420758344308468, + 2.8839935034279445 + ], + "lines": 2, + "collections": 1 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + }, + { + "title": "", + "xlim": [ + 0.0, + 1.0 + ], + "ylim": [ + 0.0, + 1.0 + ], + "lines": 0, + "collections": 0 + } + ] + } + ], + "warnings": [] + }, + { + "case": "trust_k0", + "exception": "InvalidParameterError", + "message": "The 'n_neighbors' parameter of trustworthiness must be an int in the range [1, inf). Got 0 instead.", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 183, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 142, in \n add(f\"trust_k{k}\", lambda k=k: viz.plot_trustworthiness(Z, Z, Z, k_values=[k]))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 2243, in plot_trustworthiness\n tu = trustworthiness(X_sub, Zu_sub, n_neighbors=k, metric=\"euclidean\")\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\sklearn\\utils\\_param_validation.py\", line 208, in wrapper\n validate_parameter_constraints(\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\sklearn\\utils\\_param_validation.py\", line 98, in validate_parameter_constraints\n raise InvalidParameterError(\nsklearn.utils._param_validation.InvalidParameterError: The 'n_neighbors' parameter of trustworthiness must be an int in the range [1, inf). Got 0 instead.\n", + "warnings": [] + }, + { + "case": "trust_k-1", + "exception": "InvalidParameterError", + "message": "The 'n_neighbors' parameter of trustworthiness must be an int in the range [1, inf). Got -1 instead.", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 183, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 142, in \n add(f\"trust_k{k}\", lambda k=k: viz.plot_trustworthiness(Z, Z, Z, k_values=[k]))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 2243, in plot_trustworthiness\n tu = trustworthiness(X_sub, Zu_sub, n_neighbors=k, metric=\"euclidean\")\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\sklearn\\utils\\_param_validation.py\", line 208, in wrapper\n validate_parameter_constraints(\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\sklearn\\utils\\_param_validation.py\", line 98, in validate_parameter_constraints\n raise InvalidParameterError(\nsklearn.utils._param_validation.InvalidParameterError: The 'n_neighbors' parameter of trustworthiness must be an int in the range [1, inf). Got -1 instead.\n", + "warnings": [] + }, + { + "case": "trust_k1", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Fid\u00e9lit\u00e9 de voisinage \u2014 UMAP vs t-SNE\nLAMOST DR5 \u00b7 12 spectres \u00b7 entr\u00e9e : 2 PCs", + "xlim": [ + 0.945, + 1.0550000000000002 + ], + "ylim": [ + 0.75, + 1.01 + ], + "lines": 3, + "collections": 1 + } + ] + } + ], + "warnings": [] + }, + { + "case": "trust_k6", + "exception": "ValueError", + "message": "n_neighbors (6) should be less than n_samples / 2 (6.0)", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 183, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 142, in \n add(f\"trust_k{k}\", lambda k=k: viz.plot_trustworthiness(Z, Z, Z, k_values=[k]))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 2243, in plot_trustworthiness\n tu = trustworthiness(X_sub, Zu_sub, n_neighbors=k, metric=\"euclidean\")\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\sklearn\\utils\\_param_validation.py\", line 218, in wrapper\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\sklearn\\manifold\\_t_sne.py\", line 523, in trustworthiness\n raise ValueError(\nValueError: n_neighbors (6) should be less than n_samples / 2 (6.0)\n", + "warnings": [] + }, + { + "case": "trust_k12", + "exception": "ValueError", + "message": "n_neighbors (12) should be less than n_samples / 2 (6.0)", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 183, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 142, in \n add(f\"trust_k{k}\", lambda k=k: viz.plot_trustworthiness(Z, Z, Z, k_values=[k]))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 2243, in plot_trustworthiness\n tu = trustworthiness(X_sub, Zu_sub, n_neighbors=k, metric=\"euclidean\")\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\sklearn\\utils\\_param_validation.py\", line 218, in wrapper\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\sklearn\\manifold\\_t_sne.py\", line 523, in trustworthiness\n raise ValueError(\nValueError: n_neighbors (12) should be less than n_samples / 2 (6.0)\n", + "warnings": [] + }, + { + "case": "stability_rows0", + "exception": "IndexError", + "message": "single positional indexer is out-of-bounds", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 183, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 151, in \n add(f\"stability_rows{count}\", lambda frame=frame: viz.plot_stability(frame))\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 726, in plot_stability\n method = stability_df[\"method\"].iloc[0]\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\pandas\\core\\indexing.py\", line 1342, in __getitem__\n return self._getitem_axis(maybe_callable, axis=axis)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\pandas\\core\\indexing.py\", line 2432, in _getitem_axis\n self._validate_integer(key, axis)\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\pandas\\core\\indexing.py\", line 2365, in _validate_integer\n raise IndexError(\"single positional indexer is out-of-bounds\")\nIndexError: single positional indexer is out-of-bounds\n", + "warnings": [] + }, + { + "case": "stability_rows1", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Stabilit\u00e9 de l'embedding UMAP (analyse multi-seeds)", + "xlim": [ + -0.32999999999999996, + 0.32999999999999996 + ], + "ylim": [ + -0.05500000000000001, + 0.05500000000000001 + ], + "lines": 1, + "collections": 0 + } + ] + } + ], + "warnings": [] + }, + { + "case": "stability_rows7", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Stabilit\u00e9 de l'embedding UMAP (analyse multi-seeds)", + "xlim": [ + -0.63, + 6.63 + ], + "ylim": [ + 0.0, + 0.63 + ], + "lines": 1, + "collections": 0 + } + ] + } + ], + "warnings": [] + }, + { + "case": "history_empty", + "exception": "ValueError", + "message": "attempt to get argmin of an empty sequence", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 183, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 159, in \n lambda history=history: viz.plot_training_history(history),\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 1048, in plot_training_history\n best_epoch = int(np.argmin(val_loss)) + 1\n ^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\_core\\fromnumeric.py\", line 1414, in argmin\n return _wrapfunc(a, 'argmin', axis=axis, out=out, **kwds)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\_core\\fromnumeric.py\", line 51, in _wrapfunc\n return _wrapit(obj, method, *args, **kwds)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\_core\\fromnumeric.py\", line 43, in _wrapit\n result = getattr(arr, method)(*args, **kwds)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nValueError: attempt to get argmin of an empty sequence\n", + "warnings": [] + }, + { + "case": "history_mismatched", + "exception": "ValueError", + "message": "x and y must have same first dimension, but have shapes (2,) and (1,)", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 183, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 159, in \n lambda history=history: viz.plot_training_history(history),\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 1046, in plot_training_history\n ax.plot(epochs, val_loss, color=\"#DD8452\", lw=2, ls=\"--\", label=\"Validation\")\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_axes.py\", line 1792, in plot\n lines = [*self._get_lines(self, *args, data=data, **kwargs)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py\", line 331, in __call__\n yield from self._plot_args(\n ^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py\", line 509, in _plot_args\n raise ValueError(f\"x and y must have same first dimension, but \"\nValueError: x and y must have same first dimension, but have shapes (2,) and (1,)\n", + "warnings": [] + }, + { + "case": "history_NaN", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Courbe d'apprentissage \u2014 Autoencodeur", + "xlim": [ + 0.95, + 2.05 + ], + "ylim": [ + 0.9659363289248456, + 2.070529847682755 + ], + "lines": 3, + "collections": 0 + } + ] + } + ], + "warnings": [] + }, + { + "case": "embedding_length", + "exception": "IndexError", + "message": "boolean index did not match indexed array along axis 0; size of axis is 12 but size of corresponding boolean axis is 5", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 183, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 161, in \n add(\"embedding_length\", lambda: viz.plot_embedding(Z, y=y[:5]))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 530, in plot_embedding\n Z[mask, 0],\n ~^^^^^^^^^\nIndexError: boolean index did not match indexed array along axis 0; size of axis is 12 but size of corresponding boolean axis is 5\n", + "warnings": [] + }, + { + "case": "family_zero_weights", + "result_type": "tuple", + "figures": [ + { + "axes": [ + { + "title": "Contribution par famille spectroscopique \u2014 PC1 vs PC2\n(opaque = PC1, hachur\u00e9 = PC2)", + "xlim": [ + -0.43499999999999994, + 1.4349999999999998 + ], + "ylim": [ + -0.05, + 0.05 + ], + "lines": 0, + "collections": 0 + } + ] + } + ], + "warnings": [ + "Attempting to set identical low and high ylims makes transformation singular; automatically expanding." + ] + }, + { + "case": "family_donut_zero", + "exception": "ValueError", + "message": "All wedge sizes are zero", + "traceback": "Traceback (most recent call last):\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 183, in main\n result = function()\n ^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\audit\\check_m28_boundaries.py\", line 172, in \n lambda: viz.plot_loadings_family_donut(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 327, in plot_loadings_family_donut\n self._draw_loadings_family_donut(axes[0], contrib_pc1, \"PC1\", color_map)\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\dimred\\dimred_visualizer.py\", line 956, in _draw_loadings_family_donut\n _, _, autotexts = ax.pie(\n ^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_api\\deprecation.py\", line 477, in wrapper\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\__init__.py\", line 1531, in inner\n return func(\n ^^^^^\n File \"C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_axes.py\", line 3667, in pie\n raise ValueError('All wedge sizes are zero')\nValueError: All wedge sizes are zero\n", + "warnings": [] + } + ] +} diff --git a/audit/m28_evidence_final_results.json b/audit/m28_evidence_final_results.json new file mode 100644 index 0000000..07ac14f --- /dev/null +++ b/audit/m28_evidence_final_results.json @@ -0,0 +1,9827 @@ +{ + "active_head": "d39988012c8cf5db6e7ca8a4be4c4abcf1c87f4d", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "99edf78cd1fc7a256435cf809470f76d8bef0460c674f2a5d650795e3e00deb6", + "tests/conftest.py": "73cbe56d283c68000626bb0de2bc9821a86ade182259648806222f4aaecdd99d" + }, + "mode": "proofs", + "runs": [ + { + "name": "C14_renderable_mathtext", + "method": "plot_eigenspectra", + "selection": "default_eigenspectrum", + "changed_lines": [ + 869, + 872 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "b3ea1715d05ad316ba907994cf51f603855f85e89009b7cc151e980a76481c6f", + "patch": "--- \n+++ \n@@ -869,7 +869,7 @@\n ax.text(\n lam,\n ymax * 0.88,\n- nom,\n+ nom.replace(chr(92)*2, chr(92)),\n rotation=90,\n fontsize=6,\n color=\"crimson\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_eigenspectrum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:345: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:350: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:345: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:350: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\n1 failed, 74 deselected in 1.80s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_eigenspectrum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n1 passed, 74 deselected in 0.95s\n", + "stderr": "" + } + }, + { + "name": "C01_equivalent_percent", + "method": "plot_variance_explained", + "selection": "real_pca_variance", + "changed_lines": [ + 154 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "8b74921a093af4f83f08890f592c4c0952217b3b46be509081ed8d56a050a69e", + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, 100 * ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n1 passed, 74 deselected in 2.67s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n1 passed, 74 deselected in 2.55s\n", + "stderr": "" + } + }, + { + "name": "C02_alternative_export", + "method": "_save", + "selection": "real_export_readable", + "changed_lines": [ + 1018 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "95ac85f7fbb81f0932ea60d4962a8d00b3eae4d5c2b4148589e17266f2a9d953", + "patch": "--- \n+++ \n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ fig.canvas.print_figure(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n2 passed, 73 deselected in 1.09s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n2 passed, 73 deselected in 1.05s\n", + "stderr": "" + } + }, + { + "name": "C03_alternative_palette", + "method": "plot_loadings_bar", + "selection": "signed_loadings", + "changed_lines": [ + 288 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c8833a129a116501b3ba962a48791953da763ac97fcf1c87d41ade0e8e6994f4", + "patch": "--- \n+++ \n@@ -285,7 +285,7 @@\n df = df.sort_values(\"loading\")\n \n # Couleur encodant le signe physique de la contribution.\n- colors = [\"#DD8452\" if v < 0 else \"#4C72B0\" for v in df[\"loading\"]]\n+ colors = [\"#CC5500\" if v < 0 else \"#0055CC\" for v in df[\"loading\"]]\n fig, ax = plt.subplots(figsize=(8, max(4, n_top * 0.35)), dpi=self.dpi)\n \n ax.barh(\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "signed_loadings", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n1 passed, 74 deselected in 0.85s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "signed_loadings", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n1 passed, 74 deselected in 0.86s\n", + "stderr": "" + } + }, + { + "name": "C04_explicit_alignment_refusal", + "method": "plot_ae_recon_by_spectral_type", + "selection": "reconstruction_cardinality", + "changed_lines": [ + 2536, + 2537, + 2538 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "7e93d1ce3f02ab35d08218ceb54010b192f74840f324818bf3788f4e7c52dfc4", + "patch": "--- \n+++ \n@@ -2533,6 +2533,8 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ if not (len(X) == len(X_recon) == len(spectral_types)):\n+ raise RuntimeError(\"Observation alignment: incompatible lengths\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:157: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:157: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\n1 failed, 74 deselected in 0.79s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2537, + 2674, + 2679, + 2680, + 2803, + 2807, + 2865, + 2871, + 2872, + 2985, + 2988 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n1 passed, 74 deselected in 0.59s\n", + "stderr": "" + } + }, + { + "name": "C05_gravity_units", + "method": "plot_hr_teff_regions", + "selection": "hr_region_vertices", + "changed_lines": [ + 3039, + 3057 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "552acec69a5400440601692a3036f2dfff766b4b46643f0d66fcc879c98696b7", + "patch": "--- \n+++ \n@@ -3054,7 +3054,7 @@\n MS_G_HOT + (MS_G_COOL - MS_G_HOT) * 0.35,\n ),\n (T_LO + (T_HI - T_LO) * 0.25, MS_G_COOL - 0.10),\n- (T_LO + T_PAD, G_HI - T_PAD * 2),\n+ (T_LO + T_PAD, G_HI - G_PAD * 2),\n (T_LO + T_PAD, G_HI - G_PAD),\n (T_LO + (T_HI - T_LO) * 0.20, MS_G_COOL + MS_W * 0.6),\n (\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:127: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:127: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 74 deselected in 1.11s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n1 passed, 74 deselected in 0.99s\n", + "stderr": "" + } + }, + { + "name": "C06_count_omitted", + "method": "plot_hr_teff_regions", + "selection": "hr_population_title", + "changed_lines": [ + 3213, + 3215 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "ed1ffd93182289c0629f048ccb0acfbb0860b292a686da314b2682e25ff8bc3d", + "patch": "--- \n+++ \n@@ -3212,7 +3212,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 population fournie\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000024AF435F220>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000024B36739C40>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000024AF435F220>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000024B36739C40>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\n2 failed, 73 deselected in 1.24s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n2 passed, 73 deselected in 1.11s\n", + "stderr": "" + } + }, + { + "name": "C07_small_errors_retained", + "method": "plot_ae_error_distribution_logscale", + "selection": "log_histogram_keeps", + "changed_lines": [ + 2823, + 2824 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "fc96d6a64f3b0e40da6bf7c8e281e7e7a0134e037c22c97456ffc5ee5fd55cdc", + "patch": "--- \n+++ \n@@ -2821,7 +2821,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(max(vals.min(), np.finfo(float).tiny)), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:290: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x00000225B4D17E00>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:290: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x00000225B4D17E00>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\n1 failed, 74 deselected in 1.27s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n1 passed, 74 deselected in 1.24s\n", + "stderr": "" + } + }, + { + "name": "C08_scalar_axes_supported", + "method": "plot_ae_embedding", + "selection": "no_physical_columns and plot_ae_embedding", + "changed_lines": [ + 1112, + 1113 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "9c7bb5270f973d9ab2eed8f781d84cbee44d923aa5b2d0d39a80a92d9a9400bb", + "patch": "--- \n+++ \n@@ -1109,6 +1109,7 @@\n \n PALETTE = {\"STAR\": \"#4C72B0\", \"GALAXY\": \"#DD8452\", \"QSO\": \"#55A868\"}\n MARKERS = {\"STAR\": \"o\", \"GALAXY\": \"s\", \"QSO\": \"^\"}\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_ae_embedding", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:221: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:224: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:221: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:224: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\n1 failed, 74 deselected in 0.86s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_ae_embedding", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1115, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1126, + 1128, + 1129, + 1130, + 1131, + 1133, + 1155, + 1156, + 1157, + 1158, + 1160, + 1161, + 1164, + 1166, + 1167, + 1217, + 1257, + 1262, + 1263, + 1264, + 1316, + 1353, + 1358, + 1472, + 1477, + 1598, + 1601, + 1602, + 1603, + 1640, + 1645, + 1773, + 1778, + 1779, + 1953, + 1957, + 1958, + 2004, + 2008, + 2009, + 2056, + 2063, + 2163, + 2167, + 2215, + 2220, + 2221, + 2222, + 2289, + 2294, + 2391, + 2396, + 2528, + 2534, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n1 passed, 74 deselected in 0.73s\n", + "stderr": "" + } + }, + { + "name": "C09_zoom_scalar_axes_supported", + "method": "plot_latent_zoomed", + "selection": "no_physical_columns and plot_latent_zoomed", + "changed_lines": [ + 2321, + 2322 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c3d12005048a8d692f607a4977148b4a708dcf18f570cbdb4bd3bf710e6347fa", + "patch": "--- \n+++ \n@@ -2318,6 +2318,7 @@\n ]\n \n fig, axes = plt.subplots(1, 1 + len(available), figsize=(22, 5), dpi=self.dpi)\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_latent_zoomed", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:222: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:224: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:222: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:224: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\n1 failed, 74 deselected in 0.85s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_latent_zoomed", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2324, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2335, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2343, + 2345, + 2381, + 2382, + 2384, + 2385, + 2387, + 2388, + 2389, + 2391, + 2396, + 2528, + 2534, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n1 passed, 74 deselected in 0.69s\n", + "stderr": "" + } + }, + { + "name": "C10_profile_single_slot", + "method": "plot_hdbscan_feature_profiles", + "selection": "cluster_profiles_unavailable and 1", + "changed_lines": [ + 2020 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "e56d76446680544910180a2a4f1e5d99b53d58361a1fff7f4980a2113d7c0ffb", + "patch": "--- \n+++ \n@@ -2017,7 +2017,7 @@\n ncols = 4\n nrows = (n_show + ncols - 1) // ncols\n fig, axes = plt.subplots(nrows, ncols, figsize=(5 * ncols, 4 * nrows), dpi=120)\n- axes_flat = axes.flatten() if n_show > 1 else [axes]\n+ axes_flat = np.asarray(axes).ravel()\n \n for ax_i, cid in zip(axes_flat, top_cids):\n profile = cluster_means.loc[cid]\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_profiles_unavailable and 1", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:242: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:241: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:242: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:241: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\n1 failed, 74 deselected in 0.89s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_profiles_unavailable and 1", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n1 passed, 74 deselected in 0.72s\n", + "stderr": "" + } + }, + { + "name": "C11_display_whole_trust_range", + "method": "plot_trustworthiness", + "selection": "trustworthiness_axis_contains", + "changed_lines": [ + 2279 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "ad1c94878e026d9ddc675825313ec1ed5709f1128675e1fe1487f0c7310149fc", + "patch": "--- \n+++ \n@@ -2276,7 +2276,7 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0, 1.01)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:335: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:335: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\n1 failed, 74 deselected in 2.72s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n1 passed, 74 deselected in 2.29s\n", + "stderr": "" + } + }, + { + "name": "C12_hide_unused_reconstructions", + "method": "plot_ae_reconstruction", + "selection": "more_reconstructions or reconstruction_drawn_rows", + "changed_lines": [ + 1179, + 1180, + 1181 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c80b84e92e07174091bbdc7418f60720c07530d8c68d7023c1a3961ee09beac6", + "patch": "--- \n+++ \n@@ -1176,6 +1176,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in axes[len(idx):]:\n+ unused.set_visible(False)\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions or reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:261: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "...F [100%]\n================================== FAILURES ===================================\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:261: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n1 failed, 3 passed, 71 deselected in 2.04s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions or reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1180, + 1181, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1196, + 1197, + 1198, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1210, + 1212, + 1213, + 1216, + 1218, + 1258, + 1263, + 1264, + 1265, + 1317, + 1354, + 1359, + 1473, + 1478, + 1599, + 1602, + 1603, + 1604, + 1641, + 1646, + 1774, + 1779, + 1780, + 1954, + 1958, + 1959, + 2005, + 2009, + 2010, + 2057, + 2064, + 2164, + 2168, + 2216, + 2221, + 2222, + 2223, + 2290, + 2295, + 2392, + 2397, + 2529, + 2535, + 2674, + 2679, + 2680, + 2803, + 2807, + 2865, + 2871, + 2872, + 2985, + 2988 + ], + "stdout": ".... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n4 passed, 71 deselected in 1.26s\n", + "stderr": "" + } + }, + { + "name": "F01_always_refuse_alignment", + "method": "plot_ae_recon_by_spectral_type", + "selection": "reconstruction_cardinality or spectral_type_means", + "changed_lines": [ + 2536, + 2537 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "e0e0abae314f5e5eb2996177d79dd93ed57a2e3f751236cfc0d37a00e3a0b195", + "patch": "--- \n+++ \n@@ -2533,6 +2533,7 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ raise RuntimeError(\"Observation alignment unavailable\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality or spectral_type_means", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:157: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".F [100%]\n================================== FAILURES ===================================\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:157: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\n1 failed, 1 passed, 73 deselected in 0.91s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality or spectral_type_means", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:318: in test_spectral_type_means_for_aligned_unequal_classes\n result = c.viz.plot_ae_recon_by_spectral_type(\nsrc\\dimred\\dimred_visualizer.py:2536: in plot_ae_recon_by_spectral_type\n raise RuntimeError(\"Observation alignment unavailable\")\nE RuntimeError: Observation alignment unavailable\n\nDuring handling of the above exception, another exception occurred:\ntests\\test_dimred_visualizer.py:322: in test_spectral_type_means_for_aligned_unequal_classes\n assert False, f\"Valid aligned reconstruction must remain usable: {exc}\"\nE AssertionError: Valid aligned reconstruction must remain usable: Observation alignment unavailable\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": "F. [100%]\n================================== FAILURES ===================================\n____________ test_spectral_type_means_for_aligned_unequal_classes _____________\ntests\\test_dimred_visualizer.py:318: in test_spectral_type_means_for_aligned_unequal_classes\n result = c.viz.plot_ae_recon_by_spectral_type(\nsrc\\dimred\\dimred_visualizer.py:2536: in plot_ae_recon_by_spectral_type\n raise RuntimeError(\"Observation alignment unavailable\")\nE RuntimeError: Observation alignment unavailable\n\nDuring handling of the above exception, another exception occurred:\ntests\\test_dimred_visualizer.py:322: in test_spectral_type_means_for_aligned_unequal_classes\n assert False, f\"Valid aligned reconstruction must remain usable: {exc}\"\nE AssertionError: Valid aligned reconstruction must remain usable: Observation alignment unavailable\nE assert False\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_spectral_type_means_for_aligned_unequal_classes\n1 failed, 1 passed, 73 deselected in 0.85s\n", + "stderr": "" + } + }, + { + "name": "F02_empty_hr", + "method": "plot_hr_teff_regions", + "selection": "hr_region_vertices", + "changed_lines": [ + 3160, + 3161 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "6bd35b2de52d08c61471145b27b92596e95f09e2266dd9e394fed28562632d61", + "patch": "--- \n+++ \n@@ -3157,6 +3157,7 @@\n cbar.ax.tick_params(labelsize=9)\n \n # \u2500\u2500 R\u00e9gions stellaires \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n+ REGIONS = []\n for region in REGIONS:\n patch = MplPolygon(\n np.array(region[\"poly\"]),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:127: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:127: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 74 deselected in 1.18s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert ax.patches, \"Valid HR regional figure must contain informative regions\"\nE AssertionError: Valid HR regional figure must contain informative regions\nE assert \nE + where = .patches" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3200, + 3204, + 3205, + 3206, + 3207, + 3209, + 3210, + 3212, + 3213, + 3214, + 3215, + 3217, + 3218, + 3220, + 3221, + 3223, + 3224 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:125: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert ax.patches, \"Valid HR regional figure must contain informative regions\"\nE AssertionError: Valid HR regional figure must contain informative regions\nE assert \nE + where = .patches\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 74 deselected in 1.10s\n", + "stderr": "" + } + }, + { + "name": "C13_integrated_kde_mass", + "method": "plot_latent_kde", + "selection": "kde_labeled_regions or real_kde_reproducible", + "changed_lines": [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "cf78a93bdb382d2c8b9fcfbebabb17f7af8570d0e220d9588ae8d02d8f754513", + "patch": "--- \n+++ \n@@ -2430,24 +2430,15 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered) / ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass, p)]) for p in [.68, .95, .99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions or real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930404 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768765 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561345 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9528308790780748 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".FF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[real_scipy] ________\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930404 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768765 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561345 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9528308790780748 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[real_scipy]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\n2 failed, 1 passed, 72 deselected in 4.53s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions or real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n3 passed, 72 deselected in 6.71s\n", + "stderr": "" + } + }, + { + "name": "F03_normal_thresholds_for_every_kde", + "method": "plot_latent_kde", + "selection": "kde_labeled_regions", + "changed_lines": [ + 2433, + 2434, + 2435 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "a4009e917c5151559ea5006b33f0465c7f5ca163cfec14c0d5f29f3755c56b0b", + "patch": "--- \n+++ \n@@ -2430,24 +2430,7 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ levels = [(1-p)/(2*np.pi) for p in [.99, .95, .68]]\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930404 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768765 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561345 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9528308790780748 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[real_scipy] ________\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930404 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768765 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561345 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9528308790780748 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[real_scipy]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\n2 failed, 73 deselected in 4.00s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2435, + 2436, + 2437, + 2438, + 2440, + 2441, + 2442, + 2443, + 2446, + 2447, + 2448, + 2450, + 2451, + 2452, + 2454, + 2455, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2467, + 2468, + 2470, + 2471, + 2473, + 2474, + 2476, + 2478, + 2479, + 2480, + 2481, + 2482, + 2483, + 2484, + 2485, + 2486, + 2487, + 2488, + 2489, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2502, + 2503, + 2504, + 2506, + 2507, + 2508, + 2510, + 2516, + 2655, + 2660, + 2661, + 2784, + 2788, + 2846, + 2852, + 2853, + 2966, + 2969 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n2 passed, 73 deselected in 3.72s\n", + "stderr": "" + } + } + ], + "executed_files_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "99edf78cd1fc7a256435cf809470f76d8bef0460c674f2a5d650795e3e00deb6", + "tests/conftest.py": "73cbe56d283c68000626bb0de2bc9821a86ade182259648806222f4aaecdd99d", + "tests/proofs_dimred_visualizer.py": "de21f984b997c01b4238ee2071648dc8a081799d092036606df4b78c19adf584" + }, + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930404 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768765 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561345 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9528308790780748 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:127: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000028DAC7B1FC0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000028DACE33760>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:157: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:195: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:195: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:209: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x0000028DAC59A6C0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:221: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:224: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:222: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:224: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:242: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:241: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:250: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:261: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:277: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and explained mass disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:290: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x0000028DACB86670>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:300: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:324: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1412/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:324: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1412/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:335: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:345: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:350: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1199, + 1200, + 1201, + 1202, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FFFFFFFFFFFF.FFFFFFFFF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[real_scipy] ________\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930404 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768765 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561345 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9528308790780748 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:127: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000028DAC7B1FC0>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000028DACE33760>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:157: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:195: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:195: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:209: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x0000028DAC59A6C0>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:221: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:224: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:222: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:224: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:242: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:241: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:250: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:261: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:277: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and explained mass disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:290: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x0000028DACB86670>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:300: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:324: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1412/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:324: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1412/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:335: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:345: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:350: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-i2u3lzzd\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[real_scipy]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\n21 failed, 1 passed in 9.32s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_kde_final_results.json b/audit/m28_kde_final_results.json new file mode 100644 index 0000000..905f8fc --- /dev/null +++ b/audit/m28_kde_final_results.json @@ -0,0 +1,2375 @@ +{ + "active_head": "d39988012c8cf5db6e7ca8a4be4c4abcf1c87f4d", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "99edf78cd1fc7a256435cf809470f76d8bef0460c674f2a5d650795e3e00deb6", + "tests/conftest.py": "73cbe56d283c68000626bb0de2bc9821a86ade182259648806222f4aaecdd99d" + }, + "mode": "proofs", + "runs": [ + { + "name": "C13_integrated_kde_mass", + "method": "plot_latent_kde", + "selection": "kde_labeled_regions or real_kde_reproducible", + "changed_lines": [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "cf78a93bdb382d2c8b9fcfbebabb17f7af8570d0e220d9588ae8d02d8f754513", + "patch": "--- \n+++ \n@@ -2430,24 +2430,15 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered) / ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass, p)]) for p in [.68, .95, .99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions or real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930403 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768764 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561349 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.952830879078075 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".FF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[real_scipy] ________\ntests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930403 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768764 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561349 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.952830879078075 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-84pqxk5p\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[real_scipy]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\n2 failed, 1 passed, 72 deselected in 4.69s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions or real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-84pqxk5p\\result.xml -\n3 passed, 72 deselected in 7.00s\n", + "stderr": "" + } + }, + { + "name": "F03_normal_thresholds_for_every_kde", + "method": "plot_latent_kde", + "selection": "kde_labeled_regions", + "changed_lines": [ + 2433, + 2434, + 2435 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "a4009e917c5151559ea5006b33f0465c7f5ca163cfec14c0d5f29f3755c56b0b", + "patch": "--- \n+++ \n@@ -2430,24 +2430,7 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ levels = [(1-p)/(2*np.pi) for p in [.99, .95, .68]]\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930403 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768764 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561349 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.952830879078075 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[real_scipy] ________\ntests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930403 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768764 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561349 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.952830879078075 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-84pqxk5p\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[real_scipy]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\n2 failed, 73 deselected in 3.85s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9437327299186025 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.69874415203446 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.0 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.68\nE Max relative difference among violations: 1.\nE ACTUAL: array([0.943733, 0.698744, 0. ])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9400121485066812 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.6985554894009768 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.0 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.68\nE Max relative difference among violations: 1.\nE ACTUAL: array([0.940012, 0.698555, 0. ])\nE DESIRED: array([0.99, 0.95, 0.68])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2435, + 2436, + 2437, + 2438, + 2440, + 2441, + 2442, + 2443, + 2446, + 2447, + 2448, + 2450, + 2451, + 2452, + 2454, + 2455, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2467, + 2468, + 2470, + 2471, + 2473, + 2474, + 2476, + 2478, + 2479, + 2480, + 2481, + 2482, + 2483, + 2484, + 2485, + 2486, + 2487, + 2488, + 2489, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2502, + 2503, + 2504, + 2506, + 2507, + 2508, + 2510, + 2516, + 2655, + 2660, + 2661, + 2784, + 2788, + 2846, + 2852, + 2853, + 2966, + 2969 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[real_scipy] ________\ntests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9437327299186025 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.69874415203446 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.0 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.68\nE Max relative difference among violations: 1.\nE ACTUAL: array([0.943733, 0.698744, 0. ])\nE DESIRED: array([0.99, 0.95, 0.68])\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9400121485066812 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.6985554894009768 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.0 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.68\nE Max relative difference among violations: 1.\nE ACTUAL: array([0.940012, 0.698555, 0. ])\nE DESIRED: array([0.99, 0.95, 0.68])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-84pqxk5p\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[real_scipy]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\n2 failed, 73 deselected in 3.84s\n", + "stderr": "" + } + } + ], + "executed_files_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "99edf78cd1fc7a256435cf809470f76d8bef0460c674f2a5d650795e3e00deb6", + "tests/conftest.py": "73cbe56d283c68000626bb0de2bc9821a86ade182259648806222f4aaecdd99d", + "tests/proofs_dimred_visualizer.py": "05beb617478fa7d3d4d341381f83b638ba95895c6b8b73f7e0592ea50d6faf06" + }, + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930403 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768764 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561349 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.952830879078075 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:130: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:140: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001E0AD2182E0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:140: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001E0AD41A5E0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:160: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:198: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:198: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:212: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000001E0AD4B52A0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:224: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:227: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:225: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:227: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:245: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:244: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:253: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:264: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:280: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and explained mass disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:293: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x000001E0ACB93920>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:311: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:335: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1419/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:335: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1419/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:346: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:356: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:361: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1199, + 1200, + 1201, + 1202, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FFFFFFFFFFFF.FFFFFFFFF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[real_scipy] ________\ntests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930403 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768764 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561349 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.952830879078075 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:130: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:140: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001E0AD2182E0>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:140: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001E0AD41A5E0>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:160: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:198: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:198: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:212: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000001E0AD4B52A0>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:224: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:227: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:225: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:227: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:245: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:244: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:253: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:264: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:280: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and explained mass disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:293: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x000001E0ACB93920>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:311: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:335: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1419/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:335: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1419/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:346: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:356: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:361: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-84pqxk5p\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[real_scipy]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\n21 failed, 1 passed in 9.45s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_kde_followup_results.json b/audit/m28_kde_followup_results.json new file mode 100644 index 0000000..5f37f4e --- /dev/null +++ b/audit/m28_kde_followup_results.json @@ -0,0 +1,2375 @@ +{ + "active_head": "d39988012c8cf5db6e7ca8a4be4c4abcf1c87f4d", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "99edf78cd1fc7a256435cf809470f76d8bef0460c674f2a5d650795e3e00deb6", + "tests/conftest.py": "73cbe56d283c68000626bb0de2bc9821a86ade182259648806222f4aaecdd99d" + }, + "mode": "proofs", + "runs": [ + { + "name": "C13_integrated_kde_mass", + "method": "plot_latent_kde", + "selection": "kde_labeled_regions or real_kde_reproducible", + "changed_lines": [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "cf78a93bdb382d2c8b9fcfbebabb17f7af8570d0e220d9588ae8d02d8f754513", + "patch": "--- \n+++ \n@@ -2430,24 +2430,15 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered) / ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass, p)]) for p in [.68, .95, .99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions or real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930403 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768764 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561349 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.952830879078075 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".FF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[real_scipy] ________\ntests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930403 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768764 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561349 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.952830879078075 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-z2dxrcab\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[real_scipy]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\n2 failed, 1 passed, 72 deselected in 4.70s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions or real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-z2dxrcab\\result.xml -\n3 passed, 72 deselected in 7.27s\n", + "stderr": "" + } + }, + { + "name": "F03_normal_thresholds_for_every_kde", + "method": "plot_latent_kde", + "selection": "kde_labeled_regions", + "changed_lines": [ + 2433, + 2434, + 2435 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "a4009e917c5151559ea5006b33f0465c7f5ca163cfec14c0d5f29f3755c56b0b", + "patch": "--- \n+++ \n@@ -2430,24 +2430,7 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ levels = [(1-p)/(2*np.pi) for p in [.99, .95, .68]]\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930403 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768764 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561349 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.952830879078075 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[real_scipy] ________\ntests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930403 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768764 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561349 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.952830879078075 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-z2dxrcab\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[real_scipy]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\n2 failed, 73 deselected in 4.00s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9437327299186025 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.69874415203446 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.0 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.68\nE Max relative difference among violations: 1.\nE ACTUAL: array([0.943733, 0.698744, 0. ])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(mass, 1 - 12 * np.pi * level, atol=0.006)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE \nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.92\nE Max relative difference among violations: 1.\nE ACTUAL: array(0.)\nE DESIRED: array(-0.92)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2435, + 2436, + 2437, + 2438, + 2440, + 2441, + 2442, + 2443, + 2446, + 2447, + 2448, + 2450, + 2451, + 2452, + 2454, + 2455, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2467, + 2468, + 2470, + 2471, + 2473, + 2474, + 2476, + 2478, + 2479, + 2480, + 2481, + 2482, + 2483, + 2484, + 2485, + 2486, + 2487, + 2488, + 2489, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2502, + 2503, + 2504, + 2506, + 2507, + 2508, + 2510, + 2516, + 2655, + 2660, + 2661, + 2784, + 2788, + 2846, + 2852, + 2853, + 2966, + 2969 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[real_scipy] ________\ntests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9437327299186025 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.69874415203446 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.0 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.68\nE Max relative difference among violations: 1.\nE ACTUAL: array([0.943733, 0.698744, 0. ])\nE DESIRED: array([0.99, 0.95, 0.68])\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(mass, 1 - 12 * np.pi * level, atol=0.006)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE \nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.92\nE Max relative difference among violations: 1.\nE ACTUAL: array(0.)\nE DESIRED: array(-0.92)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-z2dxrcab\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[real_scipy]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\n2 failed, 73 deselected in 3.96s\n", + "stderr": "" + } + } + ], + "executed_files_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "99edf78cd1fc7a256435cf809470f76d8bef0460c674f2a5d650795e3e00deb6", + "tests/conftest.py": "73cbe56d283c68000626bb0de2bc9821a86ade182259648806222f4aaecdd99d", + "tests/proofs_dimred_visualizer.py": "e1b8e71caf95fe3dc18d044d192307acef1e553ed9f4272acdd60eaf83913df8" + }, + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930403 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768764 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561349 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.952830879078075 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:130: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:140: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000017DD91102E0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:140: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000017DD93265E0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:160: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:198: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:198: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:212: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x0000017DD93C52A0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:224: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:227: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:225: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:227: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:245: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:244: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:253: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:264: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:280: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and explained mass disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:293: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x0000017DD93D9560>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:303: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:327: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1415/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:327: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1415/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:338: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:348: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:353: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1199, + 1200, + 1201, + 1202, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FFFFFFFFFFFF.FFFFFFFFF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[real_scipy] ________\ntests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930403 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768764 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561349 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.952830879078075 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:130: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:140: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000017DD91102E0>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:140: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000017DD93265E0>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:160: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:198: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:198: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:212: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x0000017DD93C52A0>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:224: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:227: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:225: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:227: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:245: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:244: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:253: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:264: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:280: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and explained mass disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:293: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x0000017DD93D9560>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:303: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:327: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1415/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:327: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1415/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:338: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:348: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:353: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-z2dxrcab\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[real_scipy]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\n21 failed, 1 passed in 9.63s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_mutation_initial_results.json b/audit/m28_mutation_initial_results.json new file mode 100644 index 0000000..3b5dd1b --- /dev/null +++ b/audit/m28_mutation_initial_results.json @@ -0,0 +1,10000 @@ +{ + "active_head": "39dad874610745ccd456d26972e90f6fb3a11405", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "70aa5eae01cbab39334e22a3666c562fcea772958bf367829d7f749aa6e9ee86", + "tests/conftest.py": "73cbe56d283c68000626bb0de2bc9821a86ade182259648806222f4aaecdd99d" + }, + "mode": "mutations", + "runs": [ + { + "name": "M01_color_row_roll", + "method": "plot_embedding", + "selection": "embedding_exact_observation", + "changed_lines": [ + 528 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "fbb7900faa59e5ae27981ef362e9ee99e219001a78cd03f3f8854d4bd679b3e1", + "patch": "--- \n+++ \n@@ -525,7 +525,7 @@\n # Chaque classe est trac\u00e9e s\u00e9par\u00e9ment pour g\u00e9rer couleur + marqueur.\n classes = np.unique(y)\n for cls in classes:\n- mask = y == cls\n+ mask = np.roll(y == cls, 1)\n ax.scatter(\n Z[mask, 0],\n Z[mask, 1],\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "embedding_exact_observation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n3 passed, 50 deselected in 0.83s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "embedding_exact_observation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:47: in test_embedding_exact_observation_associations\n assert_array_equal(offsets(sc), c.Z[c.y == cls])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 41.0 (ACTUAL), 7.0 (DESIRED)\nE [0, 1]: 13.0 (ACTUAL), 31.0 (DESIRED)\nE Max absolute difference among violations: 34.\nE Max relative difference among violations: 4.85714286\nE ACTUAL: array([[41., 13.]])\nE DESIRED: array([[ 7., 31.]])" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F.. [100%]\n================================== FAILURES ===================================\n___________ test_embedding_exact_observation_associations[classes] ____________\ntests\\test_dimred_visualizer.py:47: in test_embedding_exact_observation_associations\n assert_array_equal(offsets(sc), c.Z[c.y == cls])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 41.0 (ACTUAL), 7.0 (DESIRED)\nE [0, 1]: 13.0 (ACTUAL), 31.0 (DESIRED)\nE Max absolute difference among violations: 34.\nE Max relative difference among violations: 4.85714286\nE ACTUAL: array([[41., 13.]])\nE DESIRED: array([[ 7., 31.]])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_embedding_exact_observation_associations[classes]\n1 failed, 2 passed, 50 deselected in 1.03s\n", + "stderr": "" + } + }, + { + "name": "M02_variance_units", + "method": "plot_variance_explained", + "selection": "real_pca_variance", + "changed_lines": [ + 154 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "0026e09d1cd7f509e47cea034e79cdff94c6037a4a7ceaaa50d0b42ae70b7fcf", + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n1 passed, 52 deselected in 2.83s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:115: in test_real_pca_variance_and_reconstruction_energy\n assert_allclose(heights(axes[0]), np.array([9, 4, 1]) / 14 * 100)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.6428571428571428 (ACTUAL), 64.28571428571429 (DESIRED)\nE [1]: 0.2857142857142857 (ACTUAL), 28.57142857142857 (DESIRED)\nE [2]: 0.07142857142857142 (ACTUAL), 7.142857142857142 (DESIRED)\nE Max absolute difference among violations: 63.64285714\nE Max relative difference among violations: 0.99\nE ACTUAL: array([0.642857, 0.285714, 0.071429])\nE DESIRED: array([64.285714, 28.571429, 7.142857])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______________ test_real_pca_variance_and_reconstruction_energy _______________\ntests\\test_dimred_visualizer.py:115: in test_real_pca_variance_and_reconstruction_energy\n assert_allclose(heights(axes[0]), np.array([9, 4, 1]) / 14 * 100)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.6428571428571428 (ACTUAL), 64.28571428571429 (DESIRED)\nE [1]: 0.2857142857142857 (ACTUAL), 28.57142857142857 (DESIRED)\nE [2]: 0.07142857142857142 (ACTUAL), 7.142857142857142 (DESIRED)\nE Max absolute difference among violations: 63.64285714\nE Max relative difference among violations: 0.99\nE ACTUAL: array([0.642857, 0.285714, 0.071429])\nE DESIRED: array([64.285714, 28.571429, 7.142857])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_pca_variance_and_reconstruction_energy\n1 failed, 52 deselected in 2.67s\n", + "stderr": "" + } + }, + { + "name": "M03_best_is_max", + "method": "plot_training_history", + "selection": "training_history_minimum", + "changed_lines": [ + 1048 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "be86a4cc9d42b00927f9f7478ce5938b3f78e432208053698595573184c30360", + "patch": "--- \n+++ \n@@ -1045,7 +1045,7 @@\n ax.plot(epochs, train_loss, color=\"#4C72B0\", lw=2, label=\"Train\")\n ax.plot(epochs, val_loss, color=\"#DD8452\", lw=2, ls=\"--\", label=\"Validation\")\n # Best epoch d\u00e9fini sur la val_loss minimale (crit\u00e8re de s\u00e9lection mod\u00e8le).\n- best_epoch = int(np.argmin(val_loss)) + 1\n+ best_epoch = int(np.argmax(val_loss)) + 1\n best_val = min(val_loss)\n ax.axvline(\n best_epoch,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "training_history_minimum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n2 passed, 51 deselected in 1.21s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "training_history_minimum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:229: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:229: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n____ test_training_history_minimum_is_not_last_and_distinct_series[False] _____\ntests\\test_dimred_visualizer.py:229: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])\n_____ test_training_history_minimum_is_not_last_and_distinct_series[True] _____\ntests\\test_dimred_visualizer.py:229: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_training_history_minimum_is_not_last_and_distinct_series[False]\nFAILED tests/test_dimred_visualizer.py::test_training_history_minimum_is_not_last_and_distinct_series[True]\n2 failed, 51 deselected in 1.40s\n", + "stderr": "" + } + }, + { + "name": "M04_family_median", + "method": "plot_ae_error_by_family", + "selection": "error_family_mean", + "changed_lines": [ + 2742 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "0c1e0f746f1208318c3a41311cf26ca2247439221e86b8fb26a7f94c2d6ca839", + "patch": "--- \n+++ \n@@ -2739,7 +2739,7 @@\n # Agr\u00e9gation par famille pour r\u00e9sum\u00e9 interpr\u00e9table.\n df_fam = (\n df_feat_mse.groupby(\"family\")[\"mse\"]\n- .agg([\"mean\", \"std\", \"count\"])\n+ .agg([\"median\", \"std\", \"count\"]).rename(columns={\"median\": \"mean\"})\n .rename(columns={\"mean\": \"mse_mean\", \"std\": \"mse_std\", \"count\": \"n_feats\"})\n .reset_index()\n .sort_values(\"mse_mean\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "error_family_mean", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n1 passed, 52 deselected in 0.75s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "error_family_mean", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:302: in test_error_family_mean_is_feature_weighted_and_std_is_between_features\n assert_allclose(widths(axes[0]), [2.5, 50 / 3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 2 (50%)\nE Mismatch at index:\nE [1]: 16.0 (ACTUAL), 16.666666666666668 (DESIRED)\nE Max absolute difference among violations: 0.66666667\nE Max relative difference among violations: 0.04\nE ACTUAL: array([ 2.5, 16. ])\nE DESIRED: array([ 2.5 , 16.666667])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n___ test_error_family_mean_is_feature_weighted_and_std_is_between_features ____\ntests\\test_dimred_visualizer.py:302: in test_error_family_mean_is_feature_weighted_and_std_is_between_features\n assert_allclose(widths(axes[0]), [2.5, 50 / 3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 2 (50%)\nE Mismatch at index:\nE [1]: 16.0 (ACTUAL), 16.666666666666668 (DESIRED)\nE Max absolute difference among violations: 0.66666667\nE Max relative difference among violations: 0.04\nE ACTUAL: array([ 2.5, 16. ])\nE DESIRED: array([ 2.5 , 16.666667])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_error_family_mean_is_feature_weighted_and_std_is_between_features\n1 failed, 52 deselected in 0.89s\n", + "stderr": "" + } + }, + { + "name": "M05_ae_as_pca", + "method": "plot_ae_vs_pca", + "selection": "ae_pca_comparison", + "changed_lines": [ + 1236 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "4490d68bd49df52e8e3e33fcd3f3deb6afafc15b43d98456789b3a77da97d69c", + "patch": "--- \n+++ \n@@ -1233,7 +1233,7 @@\n for _, row in ae_df.iterrows():\n # Chaque AE est repr\u00e9sent\u00e9 par une ligne horizontale de performance.\n ax.axhline(\n- row[\"mse_mean\"], color=\"#DD8452\", ls=\"--\", lw=2, label=row[\"method\"]\n+ pca_df[\"mse_mean\"].iloc[0], color=\"#DD8452\", ls=\"--\", lw=2, label=row[\"method\"]\n )\n ax.annotate(\n # Position d'annotation choisie pour rester lisible sur la courbe PCA.\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "ae_pca_comparison", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n1 passed, 52 deselected in 0.69s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "ae_pca_comparison", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:264: in test_ae_pca_comparison_does_not_substitute_metrics\n assert_allclose(ax.lines[1].get_ydata(), [0.17, 0.17])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE [1]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE Max absolute difference among violations: 0.73\nE Max relative difference among violations: 4.29411765\nE ACTUAL: array([0.9, 0.9])\nE DESIRED: array([0.17, 0.17])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_____________ test_ae_pca_comparison_does_not_substitute_metrics ______________\ntests\\test_dimred_visualizer.py:264: in test_ae_pca_comparison_does_not_substitute_metrics\n assert_allclose(ax.lines[1].get_ydata(), [0.17, 0.17])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE [1]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE Max absolute difference among violations: 0.73\nE Max relative difference among violations: 4.29411765\nE ACTUAL: array([0.9, 0.9])\nE DESIRED: array([0.17, 0.17])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_ae_pca_comparison_does_not_substitute_metrics\n1 failed, 52 deselected in 0.87s\n", + "stderr": "" + } + }, + { + "name": "M06_identity_reconstruction", + "method": "plot_ae_reconstruction", + "selection": "reconstruction_drawn_rows", + "changed_lines": [ + 1182 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "9d374b178f5f5ea7f05df0b08d34b31f12680c59bb26223a5818b649832fa9f4", + "patch": "--- \n+++ \n@@ -1179,7 +1179,7 @@\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n- recon = X_recon[si]\n+ recon = X[si]\n mse_i = float(np.mean((orig - recon) ** 2))\n ax.plot(x_pos, orig, color=\"#4C72B0\", lw=1.5, alpha=0.9, label=\"Original\")\n ax.plot(\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n3 passed, 50 deselected in 1.12s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:245: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 11.0 (ACTUAL), 12.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 4.0 (DESIRED)\nE Max absolute difference among violations: 2.\nE Max relative difference among violations: 0.5\nE ACTUAL: array([11., 2.])\nE DESIRED: array([12., 4.])" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:245: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 25.0 (DESIRED)\nE [1]: 43.0 (ACTUAL), 55.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.24\nE ACTUAL: array([19., 43.])\nE DESIRED: array([25., 55.])" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:245: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 3.0 (ACTUAL), 5.0 (DESIRED)\nE [1]: 17.0 (ACTUAL), 21.0 (DESIRED)\nE Max absolute difference among violations: 4.\nE Max relative difference among violations: 0.4\nE ACTUAL: array([ 3., 17.])\nE DESIRED: array([ 5., 21.])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFF [100%]\n================================== FAILURES ===================================\n______________ test_reconstruction_drawn_rows_and_manual_mse[1] _______________\ntests\\test_dimred_visualizer.py:245: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 11.0 (ACTUAL), 12.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 4.0 (DESIRED)\nE Max absolute difference among violations: 2.\nE Max relative difference among violations: 0.5\nE ACTUAL: array([11., 2.])\nE DESIRED: array([12., 4.])\n______________ test_reconstruction_drawn_rows_and_manual_mse[3] _______________\ntests\\test_dimred_visualizer.py:245: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 25.0 (DESIRED)\nE [1]: 43.0 (ACTUAL), 55.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.24\nE ACTUAL: array([19., 43.])\nE DESIRED: array([25., 55.])\n______________ test_reconstruction_drawn_rows_and_manual_mse[6] _______________\ntests\\test_dimred_visualizer.py:245: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 3.0 (ACTUAL), 5.0 (DESIRED)\nE [1]: 17.0 (ACTUAL), 21.0 (DESIRED)\nE Max absolute difference among violations: 4.\nE Max relative difference among violations: 0.4\nE ACTUAL: array([ 3., 17.])\nE DESIRED: array([ 5., 21.])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_reconstruction_drawn_rows_and_manual_mse[1]\nFAILED tests/test_dimred_visualizer.py::test_reconstruction_drawn_rows_and_manual_mse[3]\nFAILED tests/test_dimred_visualizer.py::test_reconstruction_drawn_rows_and_manual_mse[6]\n3 failed, 50 deselected in 1.33s\n", + "stderr": "" + } + }, + { + "name": "M07_hr_color_roll", + "method": "plot_hr_diagram_embedding", + "selection": "hr_finite_triplets", + "changed_lines": [ + 923 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "9747542c8f796dcfe2334714186a9d2f1f6a2e0de7604ec1c1feb5eddbce86b4", + "patch": "--- \n+++ \n@@ -920,7 +920,7 @@\n sc = ax.scatter(\n teff[valid],\n logg[valid],\n- c=z_coord[valid],\n+ c=np.roll(z_coord[valid], 1),\n cmap=self.cmap_continuous,\n s=2,\n alpha=0.5,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_finite_triplets", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 907, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n2 passed, 51 deselected in 1.07s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_finite_triplets", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:95: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 11.0 (DESIRED)\nE [1]: 11.0 (ACTUAL), 23.0 (DESIRED)\nE [2]: 23.0 (ACTUAL), 19.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.72727273\nE ACTUAL: MaskedArray([19., 11., 23.])\nE DESIRED: array([11., 23., 19.])" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:95: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 43.0 (ACTUAL), 2.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 5.0 (DESIRED)\nE [2]: 5.0 (ACTUAL), 43.0 (DESIRED)\nE Max absolute difference among violations: 41.\nE Max relative difference among violations: 20.5\nE ACTUAL: MaskedArray([43., 2., 5.])\nE DESIRED: array([ 2., 5., 43.])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 907, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________________ test_hr_finite_triplets_and_physical_axes[0] _________________\ntests\\test_dimred_visualizer.py:95: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 11.0 (DESIRED)\nE [1]: 11.0 (ACTUAL), 23.0 (DESIRED)\nE [2]: 23.0 (ACTUAL), 19.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.72727273\nE ACTUAL: MaskedArray([19., 11., 23.])\nE DESIRED: array([11., 23., 19.])\n________________ test_hr_finite_triplets_and_physical_axes[1] _________________\ntests\\test_dimred_visualizer.py:95: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 43.0 (ACTUAL), 2.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 5.0 (DESIRED)\nE [2]: 5.0 (ACTUAL), 43.0 (DESIRED)\nE Max absolute difference among violations: 41.\nE Max relative difference among violations: 20.5\nE ACTUAL: MaskedArray([43., 2., 5.])\nE DESIRED: array([ 2., 5., 43.])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_hr_finite_triplets_and_physical_axes[0]\nFAILED tests/test_dimred_visualizer.py::test_hr_finite_triplets_and_physical_axes[1]\n2 failed, 51 deselected in 1.21s\n", + "stderr": "" + } + }, + { + "name": "M08_cluster_colors", + "method": "plot_hdbscan_clusters", + "selection": "real_analyzer_state", + "changed_lines": [ + 1393 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "4c7322cb7de655cb5ea317a71b8cec2ec4de336c2e1866b9f78c378a3ae00a1b", + "patch": "--- \n+++ \n@@ -1390,7 +1390,7 @@\n ax.scatter(\n Z[mask, 0],\n Z[mask, 1],\n- c=[color_map[cid]],\n+ c=[color_map[cluster_ids[-1]]],\n s=2,\n alpha=0.75,\n rasterized=True,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n3 passed, 50 deselected in 1.11s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:369: in test_hdbscan_real_analyzer_state_and_point_populations\n assert_allclose(sc.get_facecolors()[0, :3], hdb.color_map_[cid][:3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F.. [100%]\n================================== FAILURES ===================================\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels0] _______\ntests\\test_dimred_visualizer.py:369: in test_hdbscan_real_analyzer_state_and_point_populations\n assert_allclose(sc.get_facecolors()[0, :3], hdb.color_map_[cid][:3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels0]\n1 failed, 2 passed, 50 deselected in 1.26s\n", + "stderr": "" + } + }, + { + "name": "M09_tsne_as_umap", + "method": "plot_trustworthiness", + "selection": "real_sklearn_trustworthiness", + "changed_lines": [ + 2244 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "219f76a998ddc435edb3c68374e089462acdda0d735e2384192c4c04d16aab75", + "patch": "--- \n+++ \n@@ -2241,7 +2241,7 @@\n with warnings.catch_warnings():\n warnings.simplefilter(\"ignore\")\n tu = trustworthiness(X_sub, Zu_sub, n_neighbors=k, metric=\"euclidean\")\n- tt = trustworthiness(X_sub, Zt_sub, n_neighbors=k, metric=\"euclidean\")\n+ tt = trustworthiness(X_sub, Zu_sub, n_neighbors=k, metric=\"euclidean\")\n # Stocke T(k) pour les deux m\u00e9thodes afin de tracer la courbe comparative.\n trust_u.append(tu)\n trust_t.append(tt)\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n2 passed, 51 deselected in 2.43s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:527: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_allclose(ax.lines[1].get_ydata(), expected, atol=1e-14)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=1e-14\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 1.0 (ACTUAL), 0.5 (DESIRED)\nE [1]: 1.0 (ACTUAL), 0.5588235294117647 (DESIRED)\nE [2]: 1.0 (ACTUAL), 0.503968253968254 (DESIRED)\nE Max absolute difference among violations: 0.5\nE Max relative difference among violations: 1.\nE ACTUAL: array([1., 1., 1.])\nE DESIRED: array([0.5 , 0.558824, 0.503968])" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:527: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_allclose(ax.lines[1].get_ydata(), expected, atol=1e-14)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=1e-14\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 1.0 (ACTUAL), 0.5396825396825398 (DESIRED)\nE [1]: 1.0 (ACTUAL), 0.5252525252525253 (DESIRED)\nE [2]: 1.0 (ACTUAL), 0.6018518518518519 (DESIRED)\nE Max absolute difference among violations: 0.47474747\nE Max relative difference among violations: 0.90384615\nE ACTUAL: array([1., 1., 1.])\nE DESIRED: array([0.539683, 0.525253, 0.601852])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[12] ________\ntests\\test_dimred_visualizer.py:527: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_allclose(ax.lines[1].get_ydata(), expected, atol=1e-14)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=1e-14\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 1.0 (ACTUAL), 0.5 (DESIRED)\nE [1]: 1.0 (ACTUAL), 0.5588235294117647 (DESIRED)\nE [2]: 1.0 (ACTUAL), 0.503968253968254 (DESIRED)\nE Max absolute difference among violations: 0.5\nE Max relative difference among violations: 1.\nE ACTUAL: array([1., 1., 1.])\nE DESIRED: array([0.5 , 0.558824, 0.503968])\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[9] _________\ntests\\test_dimred_visualizer.py:527: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_allclose(ax.lines[1].get_ydata(), expected, atol=1e-14)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=1e-14\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 1.0 (ACTUAL), 0.5396825396825398 (DESIRED)\nE [1]: 1.0 (ACTUAL), 0.5252525252525253 (DESIRED)\nE [2]: 1.0 (ACTUAL), 0.6018518518518519 (DESIRED)\nE Max absolute difference among violations: 0.47474747\nE Max relative difference among violations: 0.90384615\nE ACTUAL: array([1., 1., 1.])\nE DESIRED: array([0.539683, 0.525253, 0.601852])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[12]\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[9]\n2 failed, 51 deselected in 2.85s\n", + "stderr": "" + } + }, + { + "name": "M10_confidence_constant", + "method": "plot_xgboost_umap", + "selection": "xgboost_classes_confidence", + "changed_lines": [ + 2098 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "f1bb69629105b2443c7a96086390fc68bde21d1e395b2ea7129ac0dae024f231", + "patch": "--- \n+++ \n@@ -2095,7 +2095,7 @@\n sc = ax.scatter(\n Z_umap_aligned[:, 0],\n Z_umap_aligned[:, 1],\n- c=confidence,\n+ c=np.ones(len(confidence)),\n cmap=\"RdYlGn\",\n vmin=0.4,\n vmax=1.0,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n2 passed, 51 deselected in 0.96s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:474: in test_xgboost_classes_confidence_and_cluster_associations\n assert_array_equal(axes[1].collections[0].get_array(), confidence)\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 6 / 6 (100%)\nE First 5 mismatches are at indices:\nE [0]: 1.0 (ACTUAL), 0.45 (DESIRED)\nE [1]: 1.0 (ACTUAL), 0.7 (DESIRED)\nE [2]: 1.0 (ACTUAL), 0.95 (DESIRED)\nE [3]: 1.0 (ACTUAL), 0.6 (DESIRED)\nE [4]: 1.0 (ACTUAL), 0.8 (DESIRED)\nE Max absolute difference among violations: 0.55\nE Max relative difference among violations: 1.22222222\nE ACTUAL: MaskedArray([1., 1., 1., 1., 1., 1.])\nE DESIRED: array([0.45, 0.7 , 0.95, 0.6 , 0.8 , 0.5 ])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".F [100%]\n================================== FAILURES ===================================\n____ test_xgboost_classes_confidence_and_cluster_associations[confidence1] ____\ntests\\test_dimred_visualizer.py:474: in test_xgboost_classes_confidence_and_cluster_associations\n assert_array_equal(axes[1].collections[0].get_array(), confidence)\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 6 / 6 (100%)\nE First 5 mismatches are at indices:\nE [0]: 1.0 (ACTUAL), 0.45 (DESIRED)\nE [1]: 1.0 (ACTUAL), 0.7 (DESIRED)\nE [2]: 1.0 (ACTUAL), 0.95 (DESIRED)\nE [3]: 1.0 (ACTUAL), 0.6 (DESIRED)\nE [4]: 1.0 (ACTUAL), 0.8 (DESIRED)\nE Max absolute difference among violations: 0.55\nE Max relative difference among violations: 1.22222222\nE ACTUAL: MaskedArray([1., 1., 1., 1., 1., 1.])\nE DESIRED: array([0.45, 0.7 , 0.95, 0.6 , 0.8 , 0.5 ])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_xgboost_classes_confidence_and_cluster_associations[confidence1]\n1 failed, 1 passed, 51 deselected in 1.10s\n", + "stderr": "" + } + }, + { + "name": "M11_synthesis_ae_as_pca", + "method": "plot_synthesis_grid", + "selection": "synthesis_preserves", + "changed_lines": [ + 2887 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "4f007fdb7dcae0839188918aad4eb9f77662409d9c1413989ff8d3ddeed36082", + "patch": "--- \n+++ \n@@ -2884,7 +2884,7 @@\n if Z_umap is not None:\n # UMAP est optionnel selon le notebook ex\u00e9cut\u00e9.\n METHODS.append((\"UMAP\", Z_umap, \"UMAP 1\", \"UMAP 2\"))\n- METHODS.append((\"Autoencodeur\", Z_ae, \"Latent 1\", \"Latent 2\"))\n+ METHODS.append((\"Autoencodeur\", scores_pca, \"Latent 1\", \"Latent 2\"))\n \n PARAMS = [\n (\"Classe spectrale\", None, None),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n2 passed, 51 deselected in 0.91s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:586: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:586: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[False] ___\ntests\\test_dimred_visualizer.py:586: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[True] ____\ntests\\test_dimred_visualizer.py:586: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]\n2 failed, 51 deselected in 1.09s\n", + "stderr": "" + } + }, + { + "name": "M12_stability_median", + "method": "plot_stability", + "selection": "stability_producer", + "changed_lines": [ + 744 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "c521e47969b0df802a97ecf521f45fca1a471bac3804187362b0ac01038a728f", + "patch": "--- \n+++ \n@@ -741,7 +741,7 @@\n 0.98,\n 0.97,\n # Convention actuelle: on exclut souvent seed de r\u00e9f\u00e9rence (index 0) de la moyenne.\n- f\"Moyenne : {dists[1:].mean():.4f}\" if len(dists) > 1 else \"\",\n+ f\"Moyenne : {np.median(dists[1:]):.4f}\" if len(dists) > 1 else \"\",\n transform=ax.transAxes,\n ha=\"right\",\n va=\"top\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "stability_producer", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n1 passed, 52 deselected in 1.06s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "stability_producer", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:562: in test_stability_producer_order_and_mean_without_reference\n assert f\"{expected:.4f}\" in text(ax)\nE assert '0.0120' in 'Moyenne : 0.0057'\nE + where 'Moyenne : 0.0057' = text()" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n__________ test_stability_producer_order_and_mean_without_reference ___________\ntests\\test_dimred_visualizer.py:562: in test_stability_producer_order_and_mean_without_reference\n assert f\"{expected:.4f}\" in text(ax)\nE assert '0.0120' in 'Moyenne : 0.0057'\nE + where 'Moyenne : 0.0057' = text()\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_stability_producer_order_and_mean_without_reference\n1 failed, 52 deselected in 1.23s\n", + "stderr": "" + } + }, + { + "name": "M13_profile_sign_erased", + "method": "plot_hdbscan_feature_profiles", + "selection": "profiles_signed_top", + "changed_lines": [ + 2026 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "91e32e38df5eeff868d93e08f22bde30dfd975fd423fe2b1a239a738d636a7cc", + "patch": "--- \n+++ \n@@ -2023,7 +2023,7 @@\n profile = cluster_means.loc[cid]\n # Top-5 par amplitude absolue (exc\u00e8s ou d\u00e9ficit).\n top5 = profile.abs().nlargest(5).index.tolist()\n- vals = profile[top5].values\n+ vals = np.abs(profile[top5].values)\n colors = [\"#C0392B\" if v > 0 else \"#2980B9\" for v in vals]\n labels = [\n f.replace(\"feature_\", \"\").replace(\"_eq_width\", \"\\nEW\")[:14]\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "profiles_signed_top", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n1 passed, 52 deselected in 0.73s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "profiles_signed_top", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:453: in test_cluster_profiles_signed_top_five_not_first_five\n assert_allclose(widths(axes[0]), [2, 0.9, -0.6, 0.4, -0.1])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 5 (40%)\nE Mismatch at indices:\nE [2]: 0.6 (ACTUAL), -0.6 (DESIRED)\nE [4]: 0.1 (ACTUAL), -0.1 (DESIRED)\nE Max absolute difference among violations: 1.2\nE Max relative difference among violations: 2.\nE ACTUAL: array([2. , 0.9, 0.6, 0.4, 0.1])\nE DESIRED: array([ 2. , 0.9, -0.6, 0.4, -0.1])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_cluster_profiles_signed_top_five_not_first_five _____________\ntests\\test_dimred_visualizer.py:453: in test_cluster_profiles_signed_top_five_not_first_five\n assert_allclose(widths(axes[0]), [2, 0.9, -0.6, 0.4, -0.1])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 5 (40%)\nE Mismatch at indices:\nE [2]: 0.6 (ACTUAL), -0.6 (DESIRED)\nE [4]: 0.1 (ACTUAL), -0.1 (DESIRED)\nE Max absolute difference among violations: 1.2\nE Max relative difference among violations: 2.\nE ACTUAL: array([2. , 0.9, 0.6, 0.4, 0.1])\nE DESIRED: array([ 2. , 0.9, -0.6, 0.4, -0.1])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_cluster_profiles_signed_top_five_not_first_five\n1 failed, 52 deselected in 0.85s\n", + "stderr": "" + } + }, + { + "name": "M14_density_wrong_population", + "method": "plot_ae_error_distribution", + "selection": "histogram_densities", + "changed_lines": [ + 1329 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "d5407d955fea773baff307002def63203823044aaeb4696dac2eed4d256b0523", + "patch": "--- \n+++ \n@@ -1326,7 +1326,7 @@\n bins=60,\n alpha=0.55,\n color=color,\n- density=True,\n+ density=False,\n label=f\"{cls} (n={mask.sum()}, \u03bc={vals.mean():.4f})\",\n )\n # M\u00e9diane trac\u00e9e pour robuste comparaison inter-classes.\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "histogram_densities", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n1 passed, 52 deselected in 1.49s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "histogram_densities", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:337: in test_histogram_densities_integrate_and_class_mean_median_are_distinct\n assert_allclose(sum(p.get_width() * p.get_height() for p in container), 1)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98333333\nE Max relative difference among violations: 0.98333333\nE ACTUAL: array(0.016667)\nE DESIRED: array(1)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____ test_histogram_densities_integrate_and_class_mean_median_are_distinct ____\ntests\\test_dimred_visualizer.py:337: in test_histogram_densities_integrate_and_class_mean_median_are_distinct\n assert_allclose(sum(p.get_width() * p.get_height() for p in container), 1)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98333333\nE Max relative difference among violations: 0.98333333\nE ACTUAL: array(0.016667)\nE DESIRED: array(1)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_histogram_densities_integrate_and_class_mean_median_are_distinct\n1 failed, 52 deselected in 0.96s\n", + "stderr": "" + } + }, + { + "name": "M15_kde_wrong_population", + "method": "plot_latent_kde", + "selection": "real_kde_reproducible", + "changed_lines": [ + 2401 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "91bfc71fabb5fb950157bfc2ac827c4aab3d866ca76c10d44bbf20516aa17911", + "patch": "--- \n+++ \n@@ -2398,7 +2398,7 @@\n from scipy.stats import gaussian_kde\n \n # KDE restreint \u00e0 la population stellaire pour une lecture astrophysique propre.\n- star_mask = y == \"STAR\"\n+ star_mask = np.ones(len(y), dtype=bool)\n Z_stars = Z_ae[star_mask]\n teff_s = (\n meta[\"teff_gspphot\"].values[star_mask].astype(float)\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n1 passed, 52 deselected in 2.36s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:654: in test_real_kde_reproducible_star_selection_and_observation_colors\n assert len(actual) == 119\nE assert 139 == 119\nE + where 139 = len(array([[ 1.46143263e+00, 5.04194549e-01],\\n [-1.58198440e-01, -4.02871589e-01],\\n [-5.12655840e-01, 8.0166....62051618e-01, -1.22073795e+00],\\n [-2.43641605e-01, -8.00208551e-01],\\n [-1.00969481e+00, 6.69136452e-01]]))" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_real_kde_reproducible_star_selection_and_observation_colors _______\ntests\\test_dimred_visualizer.py:654: in test_real_kde_reproducible_star_selection_and_observation_colors\n assert len(actual) == 119\nE assert 139 == 119\nE + where 139 = len(array([[ 1.46143263e+00, 5.04194549e-01],\\n [-1.58198440e-01, -4.02871589e-01],\\n [-5.12655840e-01, 8.0166....62051618e-01, -1.22073795e+00],\\n [-2.43641605e-01, -8.00208551e-01],\\n [-1.00969481e+00, 6.69136452e-01]]))\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_kde_reproducible_star_selection_and_observation_colors\n1 failed, 52 deselected in 2.26s\n", + "stderr": "" + } + }, + { + "name": "M16_export_blank_figure", + "method": "_save", + "selection": "real_export_readable", + "changed_lines": [ + 1018 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "c686947be404c32bf911a0cff410356af8ec385c229db14da4dc8ed8823359f1", + "patch": "--- \n+++ \n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ plt.figure().savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n2 passed, 51 deselected in 1.06s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:608: in test_real_export_readable_and_same_semantic_figure\n assert pixels.shape[0] > 100 and pixels.std() > 1\nE assert (250 > 100 and np.float64(0.0) > 1)\nE + where np.float64(0.0) = ()\nE + where = array([[[255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255],\\n ...,\\n [255, 255, 255],\\n ... ...,\\n [255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255]]], shape=(250, 330, 3), dtype=uint8).std" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F. [100%]\n================================== FAILURES ===================================\n___________ test_real_export_readable_and_same_semantic_figure[png] ___________\ntests\\test_dimred_visualizer.py:608: in test_real_export_readable_and_same_semantic_figure\n assert pixels.shape[0] > 100 and pixels.std() > 1\nE assert (250 > 100 and np.float64(0.0) > 1)\nE + where np.float64(0.0) = ()\nE + where = array([[[255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255],\\n ...,\\n [255, 255, 255],\\n ... ...,\\n [255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255]]], shape=(250, 330, 3), dtype=uint8).std\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_export_readable_and_same_semantic_figure[png]\n1 failed, 1 passed, 51 deselected in 1.09s\n", + "stderr": "" + } + } + ], + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "..................................................... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0954fwmg\\result.xml -\n53 passed in 14.68s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_mutation_results.json b/audit/m28_mutation_results.json new file mode 100644 index 0000000..9d61599 --- /dev/null +++ b/audit/m28_mutation_results.json @@ -0,0 +1,10007 @@ +{ + "active_head": "d39988012c8cf5db6e7ca8a4be4c4abcf1c87f4d", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "99edf78cd1fc7a256435cf809470f76d8bef0460c674f2a5d650795e3e00deb6", + "tests/conftest.py": "73cbe56d283c68000626bb0de2bc9821a86ade182259648806222f4aaecdd99d" + }, + "mode": "mutations", + "runs": [ + { + "name": "M01_color_row_roll", + "method": "plot_embedding", + "selection": "embedding_exact_observation", + "changed_lines": [ + 528 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "fbb7900faa59e5ae27981ef362e9ee99e219001a78cd03f3f8854d4bd679b3e1", + "patch": "--- \n+++ \n@@ -525,7 +525,7 @@\n # Chaque classe est trac\u00e9e s\u00e9par\u00e9ment pour g\u00e9rer couleur + marqueur.\n classes = np.unique(y)\n for cls in classes:\n- mask = y == cls\n+ mask = np.roll(y == cls, 1)\n ax.scatter(\n Z[mask, 0],\n Z[mask, 1],\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "embedding_exact_observation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n3 passed, 50 deselected in 0.83s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "embedding_exact_observation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:47: in test_embedding_exact_observation_associations\n assert_array_equal(offsets(sc), c.Z[c.y == cls])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 41.0 (ACTUAL), 7.0 (DESIRED)\nE [0, 1]: 13.0 (ACTUAL), 31.0 (DESIRED)\nE Max absolute difference among violations: 34.\nE Max relative difference among violations: 4.85714286\nE ACTUAL: array([[41., 13.]])\nE DESIRED: array([[ 7., 31.]])" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F.. [100%]\n================================== FAILURES ===================================\n___________ test_embedding_exact_observation_associations[classes] ____________\ntests\\test_dimred_visualizer.py:47: in test_embedding_exact_observation_associations\n assert_array_equal(offsets(sc), c.Z[c.y == cls])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 41.0 (ACTUAL), 7.0 (DESIRED)\nE [0, 1]: 13.0 (ACTUAL), 31.0 (DESIRED)\nE Max absolute difference among violations: 34.\nE Max relative difference among violations: 4.85714286\nE ACTUAL: array([[41., 13.]])\nE DESIRED: array([[ 7., 31.]])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_embedding_exact_observation_associations[classes]\n1 failed, 2 passed, 50 deselected in 1.00s\n", + "stderr": "" + } + }, + { + "name": "M02_variance_units", + "method": "plot_variance_explained", + "selection": "real_pca_variance", + "changed_lines": [ + 154 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "0026e09d1cd7f509e47cea034e79cdff94c6037a4a7ceaaa50d0b42ae70b7fcf", + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n1 passed, 52 deselected in 2.87s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:115: in test_real_pca_variance_and_reconstruction_energy\n assert_allclose(heights(axes[0]), np.array([9, 4, 1]) / 14 * 100)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.6428571428571428 (ACTUAL), 64.28571428571429 (DESIRED)\nE [1]: 0.2857142857142857 (ACTUAL), 28.57142857142857 (DESIRED)\nE [2]: 0.07142857142857142 (ACTUAL), 7.142857142857142 (DESIRED)\nE Max absolute difference among violations: 63.64285714\nE Max relative difference among violations: 0.99\nE ACTUAL: array([0.642857, 0.285714, 0.071429])\nE DESIRED: array([64.285714, 28.571429, 7.142857])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______________ test_real_pca_variance_and_reconstruction_energy _______________\ntests\\test_dimred_visualizer.py:115: in test_real_pca_variance_and_reconstruction_energy\n assert_allclose(heights(axes[0]), np.array([9, 4, 1]) / 14 * 100)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.6428571428571428 (ACTUAL), 64.28571428571429 (DESIRED)\nE [1]: 0.2857142857142857 (ACTUAL), 28.57142857142857 (DESIRED)\nE [2]: 0.07142857142857142 (ACTUAL), 7.142857142857142 (DESIRED)\nE Max absolute difference among violations: 63.64285714\nE Max relative difference among violations: 0.99\nE ACTUAL: array([0.642857, 0.285714, 0.071429])\nE DESIRED: array([64.285714, 28.571429, 7.142857])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_pca_variance_and_reconstruction_energy\n1 failed, 52 deselected in 2.68s\n", + "stderr": "" + } + }, + { + "name": "M03_best_is_max", + "method": "plot_training_history", + "selection": "training_history_minimum", + "changed_lines": [ + 1048 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "be86a4cc9d42b00927f9f7478ce5938b3f78e432208053698595573184c30360", + "patch": "--- \n+++ \n@@ -1045,7 +1045,7 @@\n ax.plot(epochs, train_loss, color=\"#4C72B0\", lw=2, label=\"Train\")\n ax.plot(epochs, val_loss, color=\"#DD8452\", lw=2, ls=\"--\", label=\"Validation\")\n # Best epoch d\u00e9fini sur la val_loss minimale (crit\u00e8re de s\u00e9lection mod\u00e8le).\n- best_epoch = int(np.argmin(val_loss)) + 1\n+ best_epoch = int(np.argmax(val_loss)) + 1\n best_val = min(val_loss)\n ax.axvline(\n best_epoch,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "training_history_minimum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n2 passed, 51 deselected in 1.21s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "training_history_minimum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:229: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:229: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n____ test_training_history_minimum_is_not_last_and_distinct_series[False] _____\ntests\\test_dimred_visualizer.py:229: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])\n_____ test_training_history_minimum_is_not_last_and_distinct_series[True] _____\ntests\\test_dimred_visualizer.py:229: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_training_history_minimum_is_not_last_and_distinct_series[False]\nFAILED tests/test_dimred_visualizer.py::test_training_history_minimum_is_not_last_and_distinct_series[True]\n2 failed, 51 deselected in 1.41s\n", + "stderr": "" + } + }, + { + "name": "M04_family_median", + "method": "plot_ae_error_by_family", + "selection": "error_family_mean", + "changed_lines": [ + 2740, + 2742 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "0c1e0f746f1208318c3a41311cf26ca2247439221e86b8fb26a7f94c2d6ca839", + "patch": "--- \n+++ \n@@ -2739,7 +2739,7 @@\n # Agr\u00e9gation par famille pour r\u00e9sum\u00e9 interpr\u00e9table.\n df_fam = (\n df_feat_mse.groupby(\"family\")[\"mse\"]\n- .agg([\"mean\", \"std\", \"count\"])\n+ .agg([\"median\", \"std\", \"count\"]).rename(columns={\"median\": \"mean\"})\n .rename(columns={\"mean\": \"mse_mean\", \"std\": \"mse_std\", \"count\": \"n_feats\"})\n .reset_index()\n .sort_values(\"mse_mean\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "error_family_mean", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n1 passed, 52 deselected in 0.73s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "error_family_mean", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:302: in test_error_family_mean_is_feature_weighted_and_std_is_between_features\n assert_allclose(widths(axes[0]), [2.5, 50 / 3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 2 (50%)\nE Mismatch at index:\nE [1]: 16.0 (ACTUAL), 16.666666666666668 (DESIRED)\nE Max absolute difference among violations: 0.66666667\nE Max relative difference among violations: 0.04\nE ACTUAL: array([ 2.5, 16. ])\nE DESIRED: array([ 2.5 , 16.666667])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n___ test_error_family_mean_is_feature_weighted_and_std_is_between_features ____\ntests\\test_dimred_visualizer.py:302: in test_error_family_mean_is_feature_weighted_and_std_is_between_features\n assert_allclose(widths(axes[0]), [2.5, 50 / 3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 2 (50%)\nE Mismatch at index:\nE [1]: 16.0 (ACTUAL), 16.666666666666668 (DESIRED)\nE Max absolute difference among violations: 0.66666667\nE Max relative difference among violations: 0.04\nE ACTUAL: array([ 2.5, 16. ])\nE DESIRED: array([ 2.5 , 16.666667])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_error_family_mean_is_feature_weighted_and_std_is_between_features\n1 failed, 52 deselected in 0.89s\n", + "stderr": "" + } + }, + { + "name": "M05_ae_as_pca", + "method": "plot_ae_vs_pca", + "selection": "ae_pca_comparison", + "changed_lines": [ + 1235, + 1236 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "4490d68bd49df52e8e3e33fcd3f3deb6afafc15b43d98456789b3a77da97d69c", + "patch": "--- \n+++ \n@@ -1233,7 +1233,7 @@\n for _, row in ae_df.iterrows():\n # Chaque AE est repr\u00e9sent\u00e9 par une ligne horizontale de performance.\n ax.axhline(\n- row[\"mse_mean\"], color=\"#DD8452\", ls=\"--\", lw=2, label=row[\"method\"]\n+ pca_df[\"mse_mean\"].iloc[0], color=\"#DD8452\", ls=\"--\", lw=2, label=row[\"method\"]\n )\n ax.annotate(\n # Position d'annotation choisie pour rester lisible sur la courbe PCA.\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "ae_pca_comparison", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n1 passed, 52 deselected in 0.68s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "ae_pca_comparison", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:264: in test_ae_pca_comparison_does_not_substitute_metrics\n assert_allclose(ax.lines[1].get_ydata(), [0.17, 0.17])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE [1]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE Max absolute difference among violations: 0.73\nE Max relative difference among violations: 4.29411765\nE ACTUAL: array([0.9, 0.9])\nE DESIRED: array([0.17, 0.17])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_____________ test_ae_pca_comparison_does_not_substitute_metrics ______________\ntests\\test_dimred_visualizer.py:264: in test_ae_pca_comparison_does_not_substitute_metrics\n assert_allclose(ax.lines[1].get_ydata(), [0.17, 0.17])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE [1]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE Max absolute difference among violations: 0.73\nE Max relative difference among violations: 4.29411765\nE ACTUAL: array([0.9, 0.9])\nE DESIRED: array([0.17, 0.17])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_ae_pca_comparison_does_not_substitute_metrics\n1 failed, 52 deselected in 0.84s\n", + "stderr": "" + } + }, + { + "name": "M06_identity_reconstruction", + "method": "plot_ae_reconstruction", + "selection": "reconstruction_drawn_rows", + "changed_lines": [ + 1182 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "9d374b178f5f5ea7f05df0b08d34b31f12680c59bb26223a5818b649832fa9f4", + "patch": "--- \n+++ \n@@ -1179,7 +1179,7 @@\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n- recon = X_recon[si]\n+ recon = X[si]\n mse_i = float(np.mean((orig - recon) ** 2))\n ax.plot(x_pos, orig, color=\"#4C72B0\", lw=1.5, alpha=0.9, label=\"Original\")\n ax.plot(\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n3 passed, 50 deselected in 1.14s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:245: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 11.0 (ACTUAL), 12.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 4.0 (DESIRED)\nE Max absolute difference among violations: 2.\nE Max relative difference among violations: 0.5\nE ACTUAL: array([11., 2.])\nE DESIRED: array([12., 4.])" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:245: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 25.0 (DESIRED)\nE [1]: 43.0 (ACTUAL), 55.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.24\nE ACTUAL: array([19., 43.])\nE DESIRED: array([25., 55.])" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:245: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 3.0 (ACTUAL), 5.0 (DESIRED)\nE [1]: 17.0 (ACTUAL), 21.0 (DESIRED)\nE Max absolute difference among violations: 4.\nE Max relative difference among violations: 0.4\nE ACTUAL: array([ 3., 17.])\nE DESIRED: array([ 5., 21.])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFF [100%]\n================================== FAILURES ===================================\n______________ test_reconstruction_drawn_rows_and_manual_mse[1] _______________\ntests\\test_dimred_visualizer.py:245: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 11.0 (ACTUAL), 12.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 4.0 (DESIRED)\nE Max absolute difference among violations: 2.\nE Max relative difference among violations: 0.5\nE ACTUAL: array([11., 2.])\nE DESIRED: array([12., 4.])\n______________ test_reconstruction_drawn_rows_and_manual_mse[3] _______________\ntests\\test_dimred_visualizer.py:245: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 25.0 (DESIRED)\nE [1]: 43.0 (ACTUAL), 55.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.24\nE ACTUAL: array([19., 43.])\nE DESIRED: array([25., 55.])\n______________ test_reconstruction_drawn_rows_and_manual_mse[6] _______________\ntests\\test_dimred_visualizer.py:245: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 3.0 (ACTUAL), 5.0 (DESIRED)\nE [1]: 17.0 (ACTUAL), 21.0 (DESIRED)\nE Max absolute difference among violations: 4.\nE Max relative difference among violations: 0.4\nE ACTUAL: array([ 3., 17.])\nE DESIRED: array([ 5., 21.])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_reconstruction_drawn_rows_and_manual_mse[1]\nFAILED tests/test_dimred_visualizer.py::test_reconstruction_drawn_rows_and_manual_mse[3]\nFAILED tests/test_dimred_visualizer.py::test_reconstruction_drawn_rows_and_manual_mse[6]\n3 failed, 50 deselected in 1.38s\n", + "stderr": "" + } + }, + { + "name": "M07_hr_color_roll", + "method": "plot_hr_diagram_embedding", + "selection": "hr_finite_triplets", + "changed_lines": [ + 920, + 923 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "9747542c8f796dcfe2334714186a9d2f1f6a2e0de7604ec1c1feb5eddbce86b4", + "patch": "--- \n+++ \n@@ -920,7 +920,7 @@\n sc = ax.scatter(\n teff[valid],\n logg[valid],\n- c=z_coord[valid],\n+ c=np.roll(z_coord[valid], 1),\n cmap=self.cmap_continuous,\n s=2,\n alpha=0.5,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_finite_triplets", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 907, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n2 passed, 51 deselected in 1.03s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_finite_triplets", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:95: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 11.0 (DESIRED)\nE [1]: 11.0 (ACTUAL), 23.0 (DESIRED)\nE [2]: 23.0 (ACTUAL), 19.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.72727273\nE ACTUAL: MaskedArray([19., 11., 23.])\nE DESIRED: array([11., 23., 19.])" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:95: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 43.0 (ACTUAL), 2.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 5.0 (DESIRED)\nE [2]: 5.0 (ACTUAL), 43.0 (DESIRED)\nE Max absolute difference among violations: 41.\nE Max relative difference among violations: 20.5\nE ACTUAL: MaskedArray([43., 2., 5.])\nE DESIRED: array([ 2., 5., 43.])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 907, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________________ test_hr_finite_triplets_and_physical_axes[0] _________________\ntests\\test_dimred_visualizer.py:95: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 11.0 (DESIRED)\nE [1]: 11.0 (ACTUAL), 23.0 (DESIRED)\nE [2]: 23.0 (ACTUAL), 19.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.72727273\nE ACTUAL: MaskedArray([19., 11., 23.])\nE DESIRED: array([11., 23., 19.])\n________________ test_hr_finite_triplets_and_physical_axes[1] _________________\ntests\\test_dimred_visualizer.py:95: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 43.0 (ACTUAL), 2.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 5.0 (DESIRED)\nE [2]: 5.0 (ACTUAL), 43.0 (DESIRED)\nE Max absolute difference among violations: 41.\nE Max relative difference among violations: 20.5\nE ACTUAL: MaskedArray([43., 2., 5.])\nE DESIRED: array([ 2., 5., 43.])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_hr_finite_triplets_and_physical_axes[0]\nFAILED tests/test_dimred_visualizer.py::test_hr_finite_triplets_and_physical_axes[1]\n2 failed, 51 deselected in 1.22s\n", + "stderr": "" + } + }, + { + "name": "M08_cluster_colors", + "method": "plot_hdbscan_clusters", + "selection": "real_analyzer_state", + "changed_lines": [ + 1390, + 1393 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "4c7322cb7de655cb5ea317a71b8cec2ec4de336c2e1866b9f78c378a3ae00a1b", + "patch": "--- \n+++ \n@@ -1390,7 +1390,7 @@\n ax.scatter(\n Z[mask, 0],\n Z[mask, 1],\n- c=[color_map[cid]],\n+ c=[color_map[cluster_ids[-1]]],\n s=2,\n alpha=0.75,\n rasterized=True,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n3 passed, 50 deselected in 1.12s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:376: in test_hdbscan_real_analyzer_state_and_point_populations\n assert_allclose(sc.get_facecolors()[0, :3], hdb.color_map_[cid][:3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F.. [100%]\n================================== FAILURES ===================================\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels0] _______\ntests\\test_dimred_visualizer.py:376: in test_hdbscan_real_analyzer_state_and_point_populations\n assert_allclose(sc.get_facecolors()[0, :3], hdb.color_map_[cid][:3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels0]\n1 failed, 2 passed, 50 deselected in 1.26s\n", + "stderr": "" + } + }, + { + "name": "M09_tsne_as_umap", + "method": "plot_trustworthiness", + "selection": "real_sklearn_trustworthiness", + "changed_lines": [ + 2244 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "219f76a998ddc435edb3c68374e089462acdda0d735e2384192c4c04d16aab75", + "patch": "--- \n+++ \n@@ -2241,7 +2241,7 @@\n with warnings.catch_warnings():\n warnings.simplefilter(\"ignore\")\n tu = trustworthiness(X_sub, Zu_sub, n_neighbors=k, metric=\"euclidean\")\n- tt = trustworthiness(X_sub, Zt_sub, n_neighbors=k, metric=\"euclidean\")\n+ tt = trustworthiness(X_sub, Zu_sub, n_neighbors=k, metric=\"euclidean\")\n # Stocke T(k) pour les deux m\u00e9thodes afin de tracer la courbe comparative.\n trust_u.append(tu)\n trust_t.append(tt)\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n2 passed, 51 deselected in 2.53s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:534: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_allclose(ax.lines[1].get_ydata(), expected, atol=1e-14)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=1e-14\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 1.0 (ACTUAL), 0.5 (DESIRED)\nE [1]: 1.0 (ACTUAL), 0.5588235294117647 (DESIRED)\nE [2]: 1.0 (ACTUAL), 0.503968253968254 (DESIRED)\nE Max absolute difference among violations: 0.5\nE Max relative difference among violations: 1.\nE ACTUAL: array([1., 1., 1.])\nE DESIRED: array([0.5 , 0.558824, 0.503968])" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:534: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_allclose(ax.lines[1].get_ydata(), expected, atol=1e-14)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=1e-14\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 1.0 (ACTUAL), 0.5396825396825398 (DESIRED)\nE [1]: 1.0 (ACTUAL), 0.5252525252525253 (DESIRED)\nE [2]: 1.0 (ACTUAL), 0.6018518518518519 (DESIRED)\nE Max absolute difference among violations: 0.47474747\nE Max relative difference among violations: 0.90384615\nE ACTUAL: array([1., 1., 1.])\nE DESIRED: array([0.539683, 0.525253, 0.601852])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[12] ________\ntests\\test_dimred_visualizer.py:534: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_allclose(ax.lines[1].get_ydata(), expected, atol=1e-14)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=1e-14\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 1.0 (ACTUAL), 0.5 (DESIRED)\nE [1]: 1.0 (ACTUAL), 0.5588235294117647 (DESIRED)\nE [2]: 1.0 (ACTUAL), 0.503968253968254 (DESIRED)\nE Max absolute difference among violations: 0.5\nE Max relative difference among violations: 1.\nE ACTUAL: array([1., 1., 1.])\nE DESIRED: array([0.5 , 0.558824, 0.503968])\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[9] _________\ntests\\test_dimred_visualizer.py:534: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_allclose(ax.lines[1].get_ydata(), expected, atol=1e-14)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=1e-14\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 1.0 (ACTUAL), 0.5396825396825398 (DESIRED)\nE [1]: 1.0 (ACTUAL), 0.5252525252525253 (DESIRED)\nE [2]: 1.0 (ACTUAL), 0.6018518518518519 (DESIRED)\nE Max absolute difference among violations: 0.47474747\nE Max relative difference among violations: 0.90384615\nE ACTUAL: array([1., 1., 1.])\nE DESIRED: array([0.539683, 0.525253, 0.601852])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[12]\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[9]\n2 failed, 51 deselected in 2.83s\n", + "stderr": "" + } + }, + { + "name": "M10_confidence_constant", + "method": "plot_xgboost_umap", + "selection": "xgboost_classes_confidence", + "changed_lines": [ + 2095, + 2098 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "f1bb69629105b2443c7a96086390fc68bde21d1e395b2ea7129ac0dae024f231", + "patch": "--- \n+++ \n@@ -2095,7 +2095,7 @@\n sc = ax.scatter(\n Z_umap_aligned[:, 0],\n Z_umap_aligned[:, 1],\n- c=confidence,\n+ c=np.ones(len(confidence)),\n cmap=\"RdYlGn\",\n vmin=0.4,\n vmax=1.0,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n2 passed, 51 deselected in 0.98s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:481: in test_xgboost_classes_confidence_and_cluster_associations\n assert_array_equal(axes[1].collections[0].get_array(), confidence)\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 6 / 6 (100%)\nE First 5 mismatches are at indices:\nE [0]: 1.0 (ACTUAL), 0.45 (DESIRED)\nE [1]: 1.0 (ACTUAL), 0.7 (DESIRED)\nE [2]: 1.0 (ACTUAL), 0.95 (DESIRED)\nE [3]: 1.0 (ACTUAL), 0.6 (DESIRED)\nE [4]: 1.0 (ACTUAL), 0.8 (DESIRED)\nE Max absolute difference among violations: 0.55\nE Max relative difference among violations: 1.22222222\nE ACTUAL: MaskedArray([1., 1., 1., 1., 1., 1.])\nE DESIRED: array([0.45, 0.7 , 0.95, 0.6 , 0.8 , 0.5 ])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".F [100%]\n================================== FAILURES ===================================\n____ test_xgboost_classes_confidence_and_cluster_associations[confidence1] ____\ntests\\test_dimred_visualizer.py:481: in test_xgboost_classes_confidence_and_cluster_associations\n assert_array_equal(axes[1].collections[0].get_array(), confidence)\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 6 / 6 (100%)\nE First 5 mismatches are at indices:\nE [0]: 1.0 (ACTUAL), 0.45 (DESIRED)\nE [1]: 1.0 (ACTUAL), 0.7 (DESIRED)\nE [2]: 1.0 (ACTUAL), 0.95 (DESIRED)\nE [3]: 1.0 (ACTUAL), 0.6 (DESIRED)\nE [4]: 1.0 (ACTUAL), 0.8 (DESIRED)\nE Max absolute difference among violations: 0.55\nE Max relative difference among violations: 1.22222222\nE ACTUAL: MaskedArray([1., 1., 1., 1., 1., 1.])\nE DESIRED: array([0.45, 0.7 , 0.95, 0.6 , 0.8 , 0.5 ])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_xgboost_classes_confidence_and_cluster_associations[confidence1]\n1 failed, 1 passed, 51 deselected in 1.12s\n", + "stderr": "" + } + }, + { + "name": "M11_synthesis_ae_as_pca", + "method": "plot_synthesis_grid", + "selection": "synthesis_preserves", + "changed_lines": [ + 2887 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "4f007fdb7dcae0839188918aad4eb9f77662409d9c1413989ff8d3ddeed36082", + "patch": "--- \n+++ \n@@ -2884,7 +2884,7 @@\n if Z_umap is not None:\n # UMAP est optionnel selon le notebook ex\u00e9cut\u00e9.\n METHODS.append((\"UMAP\", Z_umap, \"UMAP 1\", \"UMAP 2\"))\n- METHODS.append((\"Autoencodeur\", Z_ae, \"Latent 1\", \"Latent 2\"))\n+ METHODS.append((\"Autoencodeur\", scores_pca, \"Latent 1\", \"Latent 2\"))\n \n PARAMS = [\n (\"Classe spectrale\", None, None),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n2 passed, 51 deselected in 0.92s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:593: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:593: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[False] ___\ntests\\test_dimred_visualizer.py:593: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[True] ____\ntests\\test_dimred_visualizer.py:593: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]\n2 failed, 51 deselected in 1.14s\n", + "stderr": "" + } + }, + { + "name": "M12_stability_median", + "method": "plot_stability", + "selection": "stability_producer", + "changed_lines": [ + 740, + 744 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "c521e47969b0df802a97ecf521f45fca1a471bac3804187362b0ac01038a728f", + "patch": "--- \n+++ \n@@ -741,7 +741,7 @@\n 0.98,\n 0.97,\n # Convention actuelle: on exclut souvent seed de r\u00e9f\u00e9rence (index 0) de la moyenne.\n- f\"Moyenne : {dists[1:].mean():.4f}\" if len(dists) > 1 else \"\",\n+ f\"Moyenne : {np.median(dists[1:]):.4f}\" if len(dists) > 1 else \"\",\n transform=ax.transAxes,\n ha=\"right\",\n va=\"top\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "stability_producer", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n1 passed, 52 deselected in 1.07s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "stability_producer", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:569: in test_stability_producer_order_and_mean_without_reference\n assert f\"{expected:.4f}\" in text(ax)\nE assert '0.0120' in 'Moyenne : 0.0057'\nE + where 'Moyenne : 0.0057' = text()" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n__________ test_stability_producer_order_and_mean_without_reference ___________\ntests\\test_dimred_visualizer.py:569: in test_stability_producer_order_and_mean_without_reference\n assert f\"{expected:.4f}\" in text(ax)\nE assert '0.0120' in 'Moyenne : 0.0057'\nE + where 'Moyenne : 0.0057' = text()\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_stability_producer_order_and_mean_without_reference\n1 failed, 52 deselected in 1.22s\n", + "stderr": "" + } + }, + { + "name": "M13_profile_sign_erased", + "method": "plot_hdbscan_feature_profiles", + "selection": "profiles_signed_top", + "changed_lines": [ + 2026 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "91e32e38df5eeff868d93e08f22bde30dfd975fd423fe2b1a239a738d636a7cc", + "patch": "--- \n+++ \n@@ -2023,7 +2023,7 @@\n profile = cluster_means.loc[cid]\n # Top-5 par amplitude absolue (exc\u00e8s ou d\u00e9ficit).\n top5 = profile.abs().nlargest(5).index.tolist()\n- vals = profile[top5].values\n+ vals = np.abs(profile[top5].values)\n colors = [\"#C0392B\" if v > 0 else \"#2980B9\" for v in vals]\n labels = [\n f.replace(\"feature_\", \"\").replace(\"_eq_width\", \"\\nEW\")[:14]\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "profiles_signed_top", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n1 passed, 52 deselected in 0.74s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "profiles_signed_top", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:460: in test_cluster_profiles_signed_top_five_not_first_five\n assert_allclose(widths(axes[0]), [2, 0.9, -0.6, 0.4, -0.1])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 5 (40%)\nE Mismatch at indices:\nE [2]: 0.6 (ACTUAL), -0.6 (DESIRED)\nE [4]: 0.1 (ACTUAL), -0.1 (DESIRED)\nE Max absolute difference among violations: 1.2\nE Max relative difference among violations: 2.\nE ACTUAL: array([2. , 0.9, 0.6, 0.4, 0.1])\nE DESIRED: array([ 2. , 0.9, -0.6, 0.4, -0.1])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_cluster_profiles_signed_top_five_not_first_five _____________\ntests\\test_dimred_visualizer.py:460: in test_cluster_profiles_signed_top_five_not_first_five\n assert_allclose(widths(axes[0]), [2, 0.9, -0.6, 0.4, -0.1])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 5 (40%)\nE Mismatch at indices:\nE [2]: 0.6 (ACTUAL), -0.6 (DESIRED)\nE [4]: 0.1 (ACTUAL), -0.1 (DESIRED)\nE Max absolute difference among violations: 1.2\nE Max relative difference among violations: 2.\nE ACTUAL: array([2. , 0.9, 0.6, 0.4, 0.1])\nE DESIRED: array([ 2. , 0.9, -0.6, 0.4, -0.1])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_cluster_profiles_signed_top_five_not_first_five\n1 failed, 52 deselected in 0.92s\n", + "stderr": "" + } + }, + { + "name": "M14_density_wrong_population", + "method": "plot_ae_error_distribution", + "selection": "histogram_densities", + "changed_lines": [ + 1324, + 1329 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "d5407d955fea773baff307002def63203823044aaeb4696dac2eed4d256b0523", + "patch": "--- \n+++ \n@@ -1326,7 +1326,7 @@\n bins=60,\n alpha=0.55,\n color=color,\n- density=True,\n+ density=False,\n label=f\"{cls} (n={mask.sum()}, \u03bc={vals.mean():.4f})\",\n )\n # M\u00e9diane trac\u00e9e pour robuste comparaison inter-classes.\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "histogram_densities", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n1 passed, 52 deselected in 1.49s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "histogram_densities", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:344: in test_histogram_densities_integrate_and_class_mean_median_are_distinct\n assert_allclose(sum(p.get_width() * p.get_height() for p in container), 1)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98333333\nE Max relative difference among violations: 0.98333333\nE ACTUAL: array(0.016667)\nE DESIRED: array(1)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____ test_histogram_densities_integrate_and_class_mean_median_are_distinct ____\ntests\\test_dimred_visualizer.py:344: in test_histogram_densities_integrate_and_class_mean_median_are_distinct\n assert_allclose(sum(p.get_width() * p.get_height() for p in container), 1)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98333333\nE Max relative difference among violations: 0.98333333\nE ACTUAL: array(0.016667)\nE DESIRED: array(1)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_histogram_densities_integrate_and_class_mean_median_are_distinct\n1 failed, 52 deselected in 0.97s\n", + "stderr": "" + } + }, + { + "name": "M15_kde_wrong_population", + "method": "plot_latent_kde", + "selection": "real_kde_reproducible", + "changed_lines": [ + 2401 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "91bfc71fabb5fb950157bfc2ac827c4aab3d866ca76c10d44bbf20516aa17911", + "patch": "--- \n+++ \n@@ -2398,7 +2398,7 @@\n from scipy.stats import gaussian_kde\n \n # KDE restreint \u00e0 la population stellaire pour une lecture astrophysique propre.\n- star_mask = y == \"STAR\"\n+ star_mask = np.ones(len(y), dtype=bool)\n Z_stars = Z_ae[star_mask]\n teff_s = (\n meta[\"teff_gspphot\"].values[star_mask].astype(float)\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n1 passed, 52 deselected in 2.34s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:661: in test_real_kde_reproducible_star_selection_and_observation_colors\n assert len(actual) == 119\nE assert 139 == 119\nE + where 139 = len(array([[ 1.46143263e+00, 5.04194549e-01],\\n [-1.58198440e-01, -4.02871589e-01],\\n [-5.12655840e-01, 8.0166....62051618e-01, -1.22073795e+00],\\n [-2.43641605e-01, -8.00208551e-01],\\n [-1.00969481e+00, 6.69136452e-01]]))" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_real_kde_reproducible_star_selection_and_observation_colors _______\ntests\\test_dimred_visualizer.py:661: in test_real_kde_reproducible_star_selection_and_observation_colors\n assert len(actual) == 119\nE assert 139 == 119\nE + where 139 = len(array([[ 1.46143263e+00, 5.04194549e-01],\\n [-1.58198440e-01, -4.02871589e-01],\\n [-5.12655840e-01, 8.0166....62051618e-01, -1.22073795e+00],\\n [-2.43641605e-01, -8.00208551e-01],\\n [-1.00969481e+00, 6.69136452e-01]]))\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_kde_reproducible_star_selection_and_observation_colors\n1 failed, 52 deselected in 2.43s\n", + "stderr": "" + } + }, + { + "name": "M16_export_blank_figure", + "method": "_save", + "selection": "real_export_readable", + "changed_lines": [ + 1018 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "c686947be404c32bf911a0cff410356af8ec385c229db14da4dc8ed8823359f1", + "patch": "--- \n+++ \n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ plt.figure().savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n2 passed, 51 deselected in 1.07s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:615: in test_real_export_readable_and_same_semantic_figure\n assert pixels.shape[0] > 100 and pixels.std() > 1\nE assert (250 > 100 and np.float64(0.0) > 1)\nE + where np.float64(0.0) = ()\nE + where = array([[[255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255],\\n ...,\\n [255, 255, 255],\\n ... ...,\\n [255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255]]], shape=(250, 330, 3), dtype=uint8).std" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F. [100%]\n================================== FAILURES ===================================\n___________ test_real_export_readable_and_same_semantic_figure[png] ___________\ntests\\test_dimred_visualizer.py:615: in test_real_export_readable_and_same_semantic_figure\n assert pixels.shape[0] > 100 and pixels.std() > 1\nE assert (250 > 100 and np.float64(0.0) > 1)\nE + where np.float64(0.0) = ()\nE + where = array([[[255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255],\\n ...,\\n [255, 255, 255],\\n ... ...,\\n [255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255]]], shape=(250, 330, 3), dtype=uint8).std\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_export_readable_and_same_semantic_figure[png]\n1 failed, 1 passed, 51 deselected in 1.07s\n", + "stderr": "" + } + } + ], + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "..................................................... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-pz0eevsr\\result.xml -\n53 passed in 14.47s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_proof_baseline_results.json b/audit/m28_proof_baseline_results.json new file mode 100644 index 0000000..df1fd2b --- /dev/null +++ b/audit/m28_proof_baseline_results.json @@ -0,0 +1,1222 @@ +{ + "active_head": "d39988012c8cf5db6e7ca8a4be4c4abcf1c87f4d", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "99edf78cd1fc7a256435cf809470f76d8bef0460c674f2a5d650795e3e00deb6", + "tests/conftest.py": "73cbe56d283c68000626bb0de2bc9821a86ade182259648806222f4aaecdd99d" + }, + "mode": "baseline", + "runs": [], + "executed_files_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "99edf78cd1fc7a256435cf809470f76d8bef0460c674f2a5d650795e3e00deb6", + "tests/conftest.py": "73cbe56d283c68000626bb0de2bc9821a86ade182259648806222f4aaecdd99d", + "tests/proofs_dimred_visualizer.py": "f51ffbf87f6a4f9d4c0ba047c5d5bf4381b4e103d020162e08a1199cfb0b66c8" + }, + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930404 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768765 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561345 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9528308790780748 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:127: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002752D091FC0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002752D713760>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:157: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:195: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:195: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:209: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000002752CE7A6C0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:221: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:224: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:222: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:224: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:242: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:241: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:250: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:261: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:277: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and explained mass disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:290: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x000002752CE8CA00>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:300: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:324: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1411/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:324: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1411/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:335: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:345: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:350: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1199, + 1200, + 1201, + 1202, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FFFFFFFFFFFF.FFFFFFFFF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[real_scipy] ________\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930404 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768765 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561345 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9528308790780748 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:127: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002752D091FC0>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002752D713760>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:157: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:195: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:195: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:209: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000002752CE7A6C0>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:221: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:224: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:222: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:224: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:242: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:241: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:250: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:261: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:277: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and explained mass disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:290: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x000002752CE8CA00>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:300: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:324: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1411/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:324: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1411/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:335: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:345: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:350: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-nhf5semo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[real_scipy]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\n21 failed, 1 passed in 9.93s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_proof_controls_final_results.json b/audit/m28_proof_controls_final_results.json new file mode 100644 index 0000000..a0f9880 --- /dev/null +++ b/audit/m28_proof_controls_final_results.json @@ -0,0 +1,9323 @@ +{ + "active_head": "d39988012c8cf5db6e7ca8a4be4c4abcf1c87f4d", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "99edf78cd1fc7a256435cf809470f76d8bef0460c674f2a5d650795e3e00deb6", + "tests/conftest.py": "73cbe56d283c68000626bb0de2bc9821a86ade182259648806222f4aaecdd99d" + }, + "mode": "proofs", + "runs": [ + { + "name": "C01_equivalent_percent", + "method": "plot_variance_explained", + "selection": "real_pca_variance", + "changed_lines": [ + 154 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "8b74921a093af4f83f08890f592c4c0952217b3b46be509081ed8d56a050a69e", + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, 100 * ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n1 passed, 73 deselected in 2.98s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n1 passed, 73 deselected in 2.81s\n", + "stderr": "" + } + }, + { + "name": "C02_alternative_export", + "method": "_save", + "selection": "real_export_readable", + "changed_lines": [ + 1018 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "95ac85f7fbb81f0932ea60d4962a8d00b3eae4d5c2b4148589e17266f2a9d953", + "patch": "--- \n+++ \n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ fig.canvas.print_figure(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n2 passed, 72 deselected in 1.07s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n2 passed, 72 deselected in 1.06s\n", + "stderr": "" + } + }, + { + "name": "C03_alternative_palette", + "method": "plot_loadings_bar", + "selection": "signed_loadings", + "changed_lines": [ + 288 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c8833a129a116501b3ba962a48791953da763ac97fcf1c87d41ade0e8e6994f4", + "patch": "--- \n+++ \n@@ -285,7 +285,7 @@\n df = df.sort_values(\"loading\")\n \n # Couleur encodant le signe physique de la contribution.\n- colors = [\"#DD8452\" if v < 0 else \"#4C72B0\" for v in df[\"loading\"]]\n+ colors = [\"#CC5500\" if v < 0 else \"#0055CC\" for v in df[\"loading\"]]\n fig, ax = plt.subplots(figsize=(8, max(4, n_top * 0.35)), dpi=self.dpi)\n \n ax.barh(\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "signed_loadings", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n1 passed, 73 deselected in 0.86s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "signed_loadings", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n1 passed, 73 deselected in 0.87s\n", + "stderr": "" + } + }, + { + "name": "C04_explicit_alignment_refusal", + "method": "plot_ae_recon_by_spectral_type", + "selection": "reconstruction_cardinality", + "changed_lines": [ + 2536, + 2537, + 2538 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "7e93d1ce3f02ab35d08218ceb54010b192f74840f324818bf3788f4e7c52dfc4", + "patch": "--- \n+++ \n@@ -2533,6 +2533,8 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ if not (len(X) == len(X_recon) == len(spectral_types)):\n+ raise RuntimeError(\"Observation alignment: incompatible lengths\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:157: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:157: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\n1 failed, 73 deselected in 0.81s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2537, + 2674, + 2679, + 2680, + 2803, + 2807, + 2865, + 2871, + 2872, + 2985, + 2988 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n1 passed, 73 deselected in 0.61s\n", + "stderr": "" + } + }, + { + "name": "C05_gravity_units", + "method": "plot_hr_teff_regions", + "selection": "hr_region_vertices", + "changed_lines": [ + 3039, + 3057 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "552acec69a5400440601692a3036f2dfff766b4b46643f0d66fcc879c98696b7", + "patch": "--- \n+++ \n@@ -3054,7 +3054,7 @@\n MS_G_HOT + (MS_G_COOL - MS_G_HOT) * 0.35,\n ),\n (T_LO + (T_HI - T_LO) * 0.25, MS_G_COOL - 0.10),\n- (T_LO + T_PAD, G_HI - T_PAD * 2),\n+ (T_LO + T_PAD, G_HI - G_PAD * 2),\n (T_LO + T_PAD, G_HI - G_PAD),\n (T_LO + (T_HI - T_LO) * 0.20, MS_G_COOL + MS_W * 0.6),\n (\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:127: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:127: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 73 deselected in 1.15s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n1 passed, 73 deselected in 1.05s\n", + "stderr": "" + } + }, + { + "name": "C06_count_omitted", + "method": "plot_hr_teff_regions", + "selection": "hr_population_title", + "changed_lines": [ + 3213, + 3215 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "ed1ffd93182289c0629f048ccb0acfbb0860b292a686da314b2682e25ff8bc3d", + "patch": "--- \n+++ \n@@ -3212,7 +3212,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 population fournie\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001F338943E60>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001F338A0DA80>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001F338943E60>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001F338A0DA80>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\n2 failed, 72 deselected in 1.27s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n2 passed, 72 deselected in 1.13s\n", + "stderr": "" + } + }, + { + "name": "C07_small_errors_retained", + "method": "plot_ae_error_distribution_logscale", + "selection": "log_histogram_keeps", + "changed_lines": [ + 2823, + 2824 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "fc96d6a64f3b0e40da6bf7c8e281e7e7a0134e037c22c97456ffc5ee5fd55cdc", + "patch": "--- \n+++ \n@@ -2821,7 +2821,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(max(vals.min(), np.finfo(float).tiny)), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:290: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x000001CC21E8BE00>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:290: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x000001CC21E8BE00>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\n1 failed, 73 deselected in 1.32s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n1 passed, 73 deselected in 1.26s\n", + "stderr": "" + } + }, + { + "name": "C08_scalar_axes_supported", + "method": "plot_ae_embedding", + "selection": "no_physical_columns and plot_ae_embedding", + "changed_lines": [ + 1112, + 1113 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "9c7bb5270f973d9ab2eed8f781d84cbee44d923aa5b2d0d39a80a92d9a9400bb", + "patch": "--- \n+++ \n@@ -1109,6 +1109,7 @@\n \n PALETTE = {\"STAR\": \"#4C72B0\", \"GALAXY\": \"#DD8452\", \"QSO\": \"#55A868\"}\n MARKERS = {\"STAR\": \"o\", \"GALAXY\": \"s\", \"QSO\": \"^\"}\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_ae_embedding", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:221: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:224: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:221: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:224: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\n1 failed, 73 deselected in 0.86s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_ae_embedding", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1115, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1126, + 1128, + 1129, + 1130, + 1131, + 1133, + 1155, + 1156, + 1157, + 1158, + 1160, + 1161, + 1164, + 1166, + 1167, + 1217, + 1257, + 1262, + 1263, + 1264, + 1316, + 1353, + 1358, + 1472, + 1477, + 1598, + 1601, + 1602, + 1603, + 1640, + 1645, + 1773, + 1778, + 1779, + 1953, + 1957, + 1958, + 2004, + 2008, + 2009, + 2056, + 2063, + 2163, + 2167, + 2215, + 2220, + 2221, + 2222, + 2289, + 2294, + 2391, + 2396, + 2528, + 2534, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n1 passed, 73 deselected in 0.71s\n", + "stderr": "" + } + }, + { + "name": "C09_zoom_scalar_axes_supported", + "method": "plot_latent_zoomed", + "selection": "no_physical_columns and plot_latent_zoomed", + "changed_lines": [ + 2321, + 2322 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c3d12005048a8d692f607a4977148b4a708dcf18f570cbdb4bd3bf710e6347fa", + "patch": "--- \n+++ \n@@ -2318,6 +2318,7 @@\n ]\n \n fig, axes = plt.subplots(1, 1 + len(available), figsize=(22, 5), dpi=self.dpi)\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_latent_zoomed", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:222: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:224: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:222: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:224: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\n1 failed, 73 deselected in 0.85s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_latent_zoomed", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2324, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2335, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2343, + 2345, + 2381, + 2382, + 2384, + 2385, + 2387, + 2388, + 2389, + 2391, + 2396, + 2528, + 2534, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n1 passed, 73 deselected in 0.71s\n", + "stderr": "" + } + }, + { + "name": "C10_profile_single_slot", + "method": "plot_hdbscan_feature_profiles", + "selection": "cluster_profiles_unavailable and 1", + "changed_lines": [ + 2020 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "e56d76446680544910180a2a4f1e5d99b53d58361a1fff7f4980a2113d7c0ffb", + "patch": "--- \n+++ \n@@ -2017,7 +2017,7 @@\n ncols = 4\n nrows = (n_show + ncols - 1) // ncols\n fig, axes = plt.subplots(nrows, ncols, figsize=(5 * ncols, 4 * nrows), dpi=120)\n- axes_flat = axes.flatten() if n_show > 1 else [axes]\n+ axes_flat = np.asarray(axes).ravel()\n \n for ax_i, cid in zip(axes_flat, top_cids):\n profile = cluster_means.loc[cid]\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_profiles_unavailable and 1", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:242: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:241: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:242: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:241: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\n1 failed, 73 deselected in 0.88s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_profiles_unavailable and 1", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n1 passed, 73 deselected in 0.70s\n", + "stderr": "" + } + }, + { + "name": "C11_display_whole_trust_range", + "method": "plot_trustworthiness", + "selection": "trustworthiness_axis_contains", + "changed_lines": [ + 2279 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "ad1c94878e026d9ddc675825313ec1ed5709f1128675e1fe1487f0c7310149fc", + "patch": "--- \n+++ \n@@ -2276,7 +2276,7 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0, 1.01)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:335: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:335: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\n1 failed, 73 deselected in 2.67s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n1 passed, 73 deselected in 2.38s\n", + "stderr": "" + } + }, + { + "name": "C12_hide_unused_reconstructions", + "method": "plot_ae_reconstruction", + "selection": "more_reconstructions or reconstruction_drawn_rows", + "changed_lines": [ + 1179, + 1180, + 1181 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c80b84e92e07174091bbdc7418f60720c07530d8c68d7023c1a3961ee09beac6", + "patch": "--- \n+++ \n@@ -1176,6 +1176,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in axes[len(idx):]:\n+ unused.set_visible(False)\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions or reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:261: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "...F [100%]\n================================== FAILURES ===================================\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:261: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n1 failed, 3 passed, 70 deselected in 1.43s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions or reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1180, + 1181, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1196, + 1197, + 1198, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1210, + 1212, + 1213, + 1216, + 1218, + 1258, + 1263, + 1264, + 1265, + 1317, + 1354, + 1359, + 1473, + 1478, + 1599, + 1602, + 1603, + 1604, + 1641, + 1646, + 1774, + 1779, + 1780, + 1954, + 1958, + 1959, + 2005, + 2009, + 2010, + 2057, + 2064, + 2164, + 2168, + 2216, + 2221, + 2222, + 2223, + 2290, + 2295, + 2392, + 2397, + 2529, + 2535, + 2674, + 2679, + 2680, + 2803, + 2807, + 2865, + 2871, + 2872, + 2985, + 2988 + ], + "stdout": ".... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n4 passed, 70 deselected in 1.25s\n", + "stderr": "" + } + }, + { + "name": "F01_always_refuse_alignment", + "method": "plot_ae_recon_by_spectral_type", + "selection": "reconstruction_cardinality or spectral_type_means", + "changed_lines": [ + 2536, + 2537 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "e0e0abae314f5e5eb2996177d79dd93ed57a2e3f751236cfc0d37a00e3a0b195", + "patch": "--- \n+++ \n@@ -2533,6 +2533,7 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ raise RuntimeError(\"Observation alignment unavailable\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality or spectral_type_means", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:157: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".F [100%]\n================================== FAILURES ===================================\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:157: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\n1 failed, 1 passed, 72 deselected in 0.90s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality or spectral_type_means", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:318: in test_spectral_type_means_for_aligned_unequal_classes\n result = c.viz.plot_ae_recon_by_spectral_type(\nsrc\\dimred\\dimred_visualizer.py:2536: in plot_ae_recon_by_spectral_type\n raise RuntimeError(\"Observation alignment unavailable\")\nE RuntimeError: Observation alignment unavailable\n\nDuring handling of the above exception, another exception occurred:\ntests\\test_dimred_visualizer.py:322: in test_spectral_type_means_for_aligned_unequal_classes\n assert False, f\"Valid aligned reconstruction must remain usable: {exc}\"\nE AssertionError: Valid aligned reconstruction must remain usable: Observation alignment unavailable\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": "F. [100%]\n================================== FAILURES ===================================\n____________ test_spectral_type_means_for_aligned_unequal_classes _____________\ntests\\test_dimred_visualizer.py:318: in test_spectral_type_means_for_aligned_unequal_classes\n result = c.viz.plot_ae_recon_by_spectral_type(\nsrc\\dimred\\dimred_visualizer.py:2536: in plot_ae_recon_by_spectral_type\n raise RuntimeError(\"Observation alignment unavailable\")\nE RuntimeError: Observation alignment unavailable\n\nDuring handling of the above exception, another exception occurred:\ntests\\test_dimred_visualizer.py:322: in test_spectral_type_means_for_aligned_unequal_classes\n assert False, f\"Valid aligned reconstruction must remain usable: {exc}\"\nE AssertionError: Valid aligned reconstruction must remain usable: Observation alignment unavailable\nE assert False\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_spectral_type_means_for_aligned_unequal_classes\n1 failed, 1 passed, 72 deselected in 0.87s\n", + "stderr": "" + } + }, + { + "name": "F02_empty_hr", + "method": "plot_hr_teff_regions", + "selection": "hr_region_vertices", + "changed_lines": [ + 3160, + 3161 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "6bd35b2de52d08c61471145b27b92596e95f09e2266dd9e394fed28562632d61", + "patch": "--- \n+++ \n@@ -3157,6 +3157,7 @@\n cbar.ax.tick_params(labelsize=9)\n \n # \u2500\u2500 R\u00e9gions stellaires \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n+ REGIONS = []\n for region in REGIONS:\n patch = MplPolygon(\n np.array(region[\"poly\"]),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:127: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:127: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 73 deselected in 1.14s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert ax.patches, \"Valid HR regional figure must contain informative regions\"\nE AssertionError: Valid HR regional figure must contain informative regions\nE assert \nE + where = .patches" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3200, + 3204, + 3205, + 3206, + 3207, + 3209, + 3210, + 3212, + 3213, + 3214, + 3215, + 3217, + 3218, + 3220, + 3221, + 3223, + 3224 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:125: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert ax.patches, \"Valid HR regional figure must contain informative regions\"\nE AssertionError: Valid HR regional figure must contain informative regions\nE assert \nE + where = .patches\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 73 deselected in 1.11s\n", + "stderr": "" + } + }, + { + "name": "C13_integrated_kde_mass", + "method": "plot_latent_kde", + "selection": "kde_labeled_regions or real_kde_reproducible", + "changed_lines": [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "cf78a93bdb382d2c8b9fcfbebabb17f7af8570d0e220d9588ae8d02d8f754513", + "patch": "--- \n+++ \n@@ -2430,24 +2430,15 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered) / ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass, p)]) for p in [.68, .95, .99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions or real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930404 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768765 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561345 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9528308790780748 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".FF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[real_scipy] ________\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930404 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768765 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561345 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9528308790780748 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[real_scipy]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\n2 failed, 1 passed, 71 deselected in 4.64s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions or real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n3 passed, 71 deselected in 7.04s\n", + "stderr": "" + } + }, + { + "name": "F03_normal_thresholds_for_every_kde", + "method": "plot_latent_kde", + "selection": "kde_labeled_regions", + "changed_lines": [ + 2433, + 2434, + 2435 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "a4009e917c5151559ea5006b33f0465c7f5ca163cfec14c0d5f29f3755c56b0b", + "patch": "--- \n+++ \n@@ -2430,24 +2430,7 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ levels = [(1-p)/(2*np.pi) for p in [.99, .95, .68]]\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930404 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768765 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561345 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9528308790780748 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[real_scipy] ________\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930404 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768765 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561345 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9528308790780748 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[real_scipy]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\n2 failed, 72 deselected in 4.16s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2435, + 2436, + 2437, + 2438, + 2440, + 2441, + 2442, + 2443, + 2446, + 2447, + 2448, + 2450, + 2451, + 2452, + 2454, + 2455, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2467, + 2468, + 2470, + 2471, + 2473, + 2474, + 2476, + 2478, + 2479, + 2480, + 2481, + 2482, + 2483, + 2484, + 2485, + 2486, + 2487, + 2488, + 2489, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2502, + 2503, + 2504, + 2506, + 2507, + 2508, + 2510, + 2516, + 2655, + 2660, + 2661, + 2784, + 2788, + 2846, + 2852, + 2853, + 2966, + 2969 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n2 passed, 72 deselected in 3.86s\n", + "stderr": "" + } + } + ], + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930404 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768765 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561345 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9528308790780748 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:127: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001BF3F396B20>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001BF3F9D3300>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:157: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:195: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:195: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:209: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000001BF39E57920>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:221: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:224: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:222: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:224: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:242: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:241: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:250: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:261: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:277: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and explained mass disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:290: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x000001BEC7D1BD30>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:300: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:324: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1406/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:324: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1406/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:335: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1199, + 1200, + 1201, + 1202, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FFFFFFFFFFFF.FFFFFFFF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[real_scipy] ________\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930404 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768765 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561345 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9528308790780748 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:127: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001BF3F396B20>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001BF3F9D3300>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:157: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:195: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:195: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:209: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000001BF39E57920>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:221: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:224: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:222: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:224: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:242: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:241: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:250: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:261: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:277: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and explained mass disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:290: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x000001BEC7D1BD30>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:300: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:324: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1406/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:324: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1406/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:335: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-g8d_h_sf\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[real_scipy]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\n20 failed, 1 passed in 8.65s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_proof_controls_initial_results.json b/audit/m28_proof_controls_initial_results.json new file mode 100644 index 0000000..07ea9c4 --- /dev/null +++ b/audit/m28_proof_controls_initial_results.json @@ -0,0 +1,5949 @@ +{ + "active_head": "39dad874610745ccd456d26972e90f6fb3a11405", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "70aa5eae01cbab39334e22a3666c562fcea772958bf367829d7f749aa6e9ee86", + "tests/conftest.py": "73cbe56d283c68000626bb0de2bc9821a86ade182259648806222f4aaecdd99d" + }, + "mode": "proofs", + "runs": [ + { + "name": "C01_equivalent_percent", + "method": "plot_variance_explained", + "selection": "real_pca_variance", + "changed_lines": [ + 154 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "8b74921a093af4f83f08890f592c4c0952217b3b46be509081ed8d56a050a69e", + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, 100 * ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-v0ig66eu\\result.xml -\n1 passed, 73 deselected in 3.01s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-v0ig66eu\\result.xml -\n1 passed, 73 deselected in 2.80s\n", + "stderr": "" + } + }, + { + "name": "C02_alternative_export", + "method": "_save", + "selection": "real_export_readable", + "changed_lines": [ + 1018 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "95ac85f7fbb81f0932ea60d4962a8d00b3eae4d5c2b4148589e17266f2a9d953", + "patch": "--- \n+++ \n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ fig.canvas.print_figure(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-v0ig66eu\\result.xml -\n2 passed, 72 deselected in 1.07s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-v0ig66eu\\result.xml -\n2 passed, 72 deselected in 1.09s\n", + "stderr": "" + } + }, + { + "name": "C03_alternative_palette", + "method": "plot_loadings_bar", + "selection": "signed_loadings", + "changed_lines": [ + 288 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c8833a129a116501b3ba962a48791953da763ac97fcf1c87d41ade0e8e6994f4", + "patch": "--- \n+++ \n@@ -285,7 +285,7 @@\n df = df.sort_values(\"loading\")\n \n # Couleur encodant le signe physique de la contribution.\n- colors = [\"#DD8452\" if v < 0 else \"#4C72B0\" for v in df[\"loading\"]]\n+ colors = [\"#CC5500\" if v < 0 else \"#0055CC\" for v in df[\"loading\"]]\n fig, ax = plt.subplots(figsize=(8, max(4, n_top * 0.35)), dpi=self.dpi)\n \n ax.barh(\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "signed_loadings", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-v0ig66eu\\result.xml -\n1 passed, 73 deselected in 0.86s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "signed_loadings", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-v0ig66eu\\result.xml -\n1 passed, 73 deselected in 0.87s\n", + "stderr": "" + } + }, + { + "name": "C04_explicit_alignment_refusal", + "method": "plot_ae_recon_by_spectral_type", + "selection": "reconstruction_cardinality", + "changed_lines": [ + 2536, + 2537, + 2538 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "7e93d1ce3f02ab35d08218ceb54010b192f74840f324818bf3788f4e7c52dfc4", + "patch": "--- \n+++ \n@@ -2533,6 +2533,8 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ if not (len(X) == len(X_recon) == len(spectral_types)):\n+ raise RuntimeError(\"Observation alignment: incompatible lengths\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:156: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:156: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-v0ig66eu\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\n1 failed, 73 deselected in 0.81s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2537, + 2674, + 2679, + 2680, + 2803, + 2807, + 2865, + 2871, + 2872, + 2985, + 2988 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-v0ig66eu\\result.xml -\n1 passed, 73 deselected in 0.62s\n", + "stderr": "" + } + }, + { + "name": "C05_gravity_units", + "method": "plot_hr_teff_regions", + "selection": "hr_region_vertices", + "changed_lines": [ + 3057 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "552acec69a5400440601692a3036f2dfff766b4b46643f0d66fcc879c98696b7", + "patch": "--- \n+++ \n@@ -3054,7 +3054,7 @@\n MS_G_HOT + (MS_G_COOL - MS_G_HOT) * 0.35,\n ),\n (T_LO + (T_HI - T_LO) * 0.25, MS_G_COOL - 0.10),\n- (T_LO + T_PAD, G_HI - T_PAD * 2),\n+ (T_LO + T_PAD, G_HI - G_PAD * 2),\n (T_LO + T_PAD, G_HI - G_PAD),\n (T_LO + (T_HI - T_LO) * 0.20, MS_G_COOL + MS_W * 0.6),\n (\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:126: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:126: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-v0ig66eu\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 73 deselected in 1.13s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-v0ig66eu\\result.xml -\n1 passed, 73 deselected in 0.99s\n", + "stderr": "" + } + }, + { + "name": "C06_count_omitted", + "method": "plot_hr_teff_regions", + "selection": "hr_population_title", + "changed_lines": [ + 3215 + ], + "reached": false, + "same_collection": true, + "classification": "INCONCLUSIVE", + "candidate_lf_sha256": "ed1ffd93182289c0629f048ccb0acfbb0860b292a686da314b2682e25ff8bc3d", + "patch": "--- \n+++ \n@@ -3212,7 +3212,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 population fournie\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002D549BE3680>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002D549CACD60>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:136: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002D549BE3680>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:136: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002D549CACD60>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-v0ig66eu\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\n2 failed, 72 deselected in 1.31s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-v0ig66eu\\result.xml -\n2 passed, 72 deselected in 1.12s\n", + "stderr": "" + } + }, + { + "name": "C07_small_errors_retained", + "method": "plot_ae_error_distribution_logscale", + "selection": "log_histogram_keeps", + "changed_lines": [ + 2824 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "fc96d6a64f3b0e40da6bf7c8e281e7e7a0134e037c22c97456ffc5ee5fd55cdc", + "patch": "--- \n+++ \n@@ -2821,7 +2821,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(max(vals.min(), np.finfo(float).tiny)), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:268: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x000001AA3D937E00>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:268: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x000001AA3D937E00>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-v0ig66eu\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\n1 failed, 73 deselected in 1.31s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-v0ig66eu\\result.xml -\n1 passed, 73 deselected in 1.25s\n", + "stderr": "" + } + }, + { + "name": "F01_always_refuse_alignment", + "method": "plot_ae_recon_by_spectral_type", + "selection": "reconstruction_cardinality or spectral_type_means", + "changed_lines": [ + 2536, + 2537 + ], + "reached": true, + "same_collection": true, + "classification": "NON_ASSERTION_FAILURE", + "candidate_lf_sha256": "e0e0abae314f5e5eb2996177d79dd93ed57a2e3f751236cfc0d37a00e3a0b195", + "patch": "--- \n+++ \n@@ -2533,6 +2533,7 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ raise RuntimeError(\"Observation alignment unavailable\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality or spectral_type_means", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:156: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".F [100%]\n================================== FAILURES ===================================\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:156: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-v0ig66eu\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\n1 failed, 1 passed, 72 deselected in 0.90s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality or spectral_type_means", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:317: in test_spectral_type_means_for_aligned_unequal_classes\n _, axes = c.viz.plot_ae_recon_by_spectral_type(\nsrc\\dimred\\dimred_visualizer.py:2536: in plot_ae_recon_by_spectral_type\n raise RuntimeError(\"Observation alignment unavailable\")\nE RuntimeError: Observation alignment unavailable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": "F. [100%]\n================================== FAILURES ===================================\n____________ test_spectral_type_means_for_aligned_unequal_classes _____________\ntests\\test_dimred_visualizer.py:317: in test_spectral_type_means_for_aligned_unequal_classes\n _, axes = c.viz.plot_ae_recon_by_spectral_type(\nsrc\\dimred\\dimred_visualizer.py:2536: in plot_ae_recon_by_spectral_type\n raise RuntimeError(\"Observation alignment unavailable\")\nE RuntimeError: Observation alignment unavailable\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-v0ig66eu\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_spectral_type_means_for_aligned_unequal_classes\n1 failed, 1 passed, 72 deselected in 0.83s\n", + "stderr": "" + } + }, + { + "name": "F02_empty_hr", + "method": "plot_hr_teff_regions", + "selection": "hr_region_vertices", + "changed_lines": [ + 3160, + 3161 + ], + "reached": true, + "same_collection": true, + "classification": "NON_ASSERTION_FAILURE", + "candidate_lf_sha256": "6bd35b2de52d08c61471145b27b92596e95f09e2266dd9e394fed28562632d61", + "patch": "--- \n+++ \n@@ -3157,6 +3157,7 @@\n cbar.ax.tick_params(labelsize=9)\n \n # \u2500\u2500 R\u00e9gions stellaires \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n+ REGIONS = []\n for region in REGIONS:\n patch = MplPolygon(\n np.array(region[\"poly\"]),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:126: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:126: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-v0ig66eu\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 73 deselected in 1.12s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n vertices = np.vstack([p.get_xy() for p in ax.patches])\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\_core\\shape_base.py:290: in vstack\n return _nx.concatenate(arrs, 0, dtype=dtype, casting=casting)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nE ValueError: need at least one array to concatenate" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3200, + 3204, + 3205, + 3206, + 3207, + 3209, + 3210, + 3212, + 3213, + 3214, + 3215, + 3217, + 3218, + 3220, + 3221, + 3223, + 3224 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:125: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n vertices = np.vstack([p.get_xy() for p in ax.patches])\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\numpy\\_core\\shape_base.py:290: in vstack\n return _nx.concatenate(arrs, 0, dtype=dtype, casting=casting)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nE ValueError: need at least one array to concatenate\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-v0ig66eu\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 73 deselected in 1.13s\n", + "stderr": "" + } + } + ], + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930404 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768765 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561345 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9528308790780748 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:126: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002D359503220>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002D359C065E0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:156: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:181: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 1.0 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.0 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.0 (DESIRED)\nE Max absolute difference among violations: 0.5204\nE Max relative difference among violations: 0.5204\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([1., 0., 0.])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:181: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 1.0 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.0 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.0 (DESIRED)\nE Max absolute difference among violations: 0.5204\nE Max relative difference among violations: 0.5204\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([1., 0., 0.])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:195: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000002D3594F74C0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:207: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:210: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:208: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:210: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:228: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:227: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:236: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:247: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:260: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert \"3 PCs\\n\u2192 85.0%\" not in annotations, annotations\nE AssertionError: 3 PCs\nE \u2192 85.0%\nE assert '3 PCs\\n\\u2192 85.0%' not in '3 PCs\\n\\u2192 85.0%'\nE \nE '3 PCs\\n\u2192 85.0%' is contained here:\nE 3 PCs\nE \u2192 85.0%" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:268: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x000002D3597C8EE0>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:278: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:302: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1392/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:302: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1392/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:313: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1199, + 1200, + 1201, + 1202, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FFFFFFFFFFFF.FFFFFFFF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[real_scipy] ________\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930404 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768765 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561345 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9528308790780748 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:126: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:136: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002D359503220>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:136: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002D359C065E0>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:156: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:181: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 1.0 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.0 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.0 (DESIRED)\nE Max absolute difference among violations: 0.5204\nE Max relative difference among violations: 0.5204\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([1., 0., 0.])\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:181: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 1.0 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.0 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.0 (DESIRED)\nE Max absolute difference among violations: 0.5204\nE Max relative difference among violations: 0.5204\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([1., 0., 0.])\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:195: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000002D3594F74C0>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:207: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:210: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:208: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:210: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:228: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:227: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:236: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:247: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:260: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert \"3 PCs\\n\u2192 85.0%\" not in annotations, annotations\nE AssertionError: 3 PCs\nE \u2192 85.0%\nE assert '3 PCs\\n\\u2192 85.0%' not in '3 PCs\\n\\u2192 85.0%'\nE \nE '3 PCs\\n\u2192 85.0%' is contained here:\nE 3 PCs\nE \u2192 85.0%\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:268: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x000002D3597C8EE0>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:278: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:302: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1392/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:302: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1392/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:313: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-v0ig66eu\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[real_scipy]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\n20 failed, 1 passed in 8.81s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_proof_controls_results.json b/audit/m28_proof_controls_results.json new file mode 100644 index 0000000..1fcc33b --- /dev/null +++ b/audit/m28_proof_controls_results.json @@ -0,0 +1,8171 @@ +{ + "active_head": "d39988012c8cf5db6e7ca8a4be4c4abcf1c87f4d", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "288c8a9121dd3abf7d789705a7988352fe2ebce1fd611c7e73fa18b69f69da2a", + "tests/conftest.py": "73cbe56d283c68000626bb0de2bc9821a86ade182259648806222f4aaecdd99d" + }, + "mode": "proofs", + "runs": [ + { + "name": "C01_equivalent_percent", + "method": "plot_variance_explained", + "selection": "real_pca_variance", + "changed_lines": [ + 154 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "8b74921a093af4f83f08890f592c4c0952217b3b46be509081ed8d56a050a69e", + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, 100 * ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n1 passed, 73 deselected in 2.86s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n1 passed, 73 deselected in 2.61s\n", + "stderr": "" + } + }, + { + "name": "C02_alternative_export", + "method": "_save", + "selection": "real_export_readable", + "changed_lines": [ + 1018 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "95ac85f7fbb81f0932ea60d4962a8d00b3eae4d5c2b4148589e17266f2a9d953", + "patch": "--- \n+++ \n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ fig.canvas.print_figure(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n2 passed, 72 deselected in 1.07s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n2 passed, 72 deselected in 1.06s\n", + "stderr": "" + } + }, + { + "name": "C03_alternative_palette", + "method": "plot_loadings_bar", + "selection": "signed_loadings", + "changed_lines": [ + 288 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c8833a129a116501b3ba962a48791953da763ac97fcf1c87d41ade0e8e6994f4", + "patch": "--- \n+++ \n@@ -285,7 +285,7 @@\n df = df.sort_values(\"loading\")\n \n # Couleur encodant le signe physique de la contribution.\n- colors = [\"#DD8452\" if v < 0 else \"#4C72B0\" for v in df[\"loading\"]]\n+ colors = [\"#CC5500\" if v < 0 else \"#0055CC\" for v in df[\"loading\"]]\n fig, ax = plt.subplots(figsize=(8, max(4, n_top * 0.35)), dpi=self.dpi)\n \n ax.barh(\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "signed_loadings", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n1 passed, 73 deselected in 0.88s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "signed_loadings", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n1 passed, 73 deselected in 0.89s\n", + "stderr": "" + } + }, + { + "name": "C04_explicit_alignment_refusal", + "method": "plot_ae_recon_by_spectral_type", + "selection": "reconstruction_cardinality", + "changed_lines": [ + 2536, + 2537, + 2538 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "7e93d1ce3f02ab35d08218ceb54010b192f74840f324818bf3788f4e7c52dfc4", + "patch": "--- \n+++ \n@@ -2533,6 +2533,8 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ if not (len(X) == len(X_recon) == len(spectral_types)):\n+ raise RuntimeError(\"Observation alignment: incompatible lengths\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:157: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:157: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\n1 failed, 73 deselected in 0.80s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2537, + 2674, + 2679, + 2680, + 2803, + 2807, + 2865, + 2871, + 2872, + 2985, + 2988 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n1 passed, 73 deselected in 0.60s\n", + "stderr": "" + } + }, + { + "name": "C05_gravity_units", + "method": "plot_hr_teff_regions", + "selection": "hr_region_vertices", + "changed_lines": [ + 3039, + 3057 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "552acec69a5400440601692a3036f2dfff766b4b46643f0d66fcc879c98696b7", + "patch": "--- \n+++ \n@@ -3054,7 +3054,7 @@\n MS_G_HOT + (MS_G_COOL - MS_G_HOT) * 0.35,\n ),\n (T_LO + (T_HI - T_LO) * 0.25, MS_G_COOL - 0.10),\n- (T_LO + T_PAD, G_HI - T_PAD * 2),\n+ (T_LO + T_PAD, G_HI - G_PAD * 2),\n (T_LO + T_PAD, G_HI - G_PAD),\n (T_LO + (T_HI - T_LO) * 0.20, MS_G_COOL + MS_W * 0.6),\n (\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:127: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:127: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 73 deselected in 1.12s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n1 passed, 73 deselected in 0.99s\n", + "stderr": "" + } + }, + { + "name": "C06_count_omitted", + "method": "plot_hr_teff_regions", + "selection": "hr_population_title", + "changed_lines": [ + 3213, + 3215 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "ed1ffd93182289c0629f048ccb0acfbb0860b292a686da314b2682e25ff8bc3d", + "patch": "--- \n+++ \n@@ -3212,7 +3212,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 population fournie\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002A2A934F680>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002A2A931CD60>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002A2A934F680>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002A2A931CD60>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\n2 failed, 72 deselected in 1.26s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n2 passed, 72 deselected in 1.11s\n", + "stderr": "" + } + }, + { + "name": "C07_small_errors_retained", + "method": "plot_ae_error_distribution_logscale", + "selection": "log_histogram_keeps", + "changed_lines": [ + 2823, + 2824 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "fc96d6a64f3b0e40da6bf7c8e281e7e7a0134e037c22c97456ffc5ee5fd55cdc", + "patch": "--- \n+++ \n@@ -2821,7 +2821,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(max(vals.min(), np.finfo(float).tiny)), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:292: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x000001AA48E4FED0>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:292: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x000001AA48E4FED0>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\n1 failed, 73 deselected in 1.30s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n1 passed, 73 deselected in 1.24s\n", + "stderr": "" + } + }, + { + "name": "C08_scalar_axes_supported", + "method": "plot_ae_embedding", + "selection": "no_physical_columns and plot_ae_embedding", + "changed_lines": [ + 1112, + 1113 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "9c7bb5270f973d9ab2eed8f781d84cbee44d923aa5b2d0d39a80a92d9a9400bb", + "patch": "--- \n+++ \n@@ -1109,6 +1109,7 @@\n \n PALETTE = {\"STAR\": \"#4C72B0\", \"GALAXY\": \"#DD8452\", \"QSO\": \"#55A868\"}\n MARKERS = {\"STAR\": \"o\", \"GALAXY\": \"s\", \"QSO\": \"^\"}\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_ae_embedding", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:223: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:226: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:223: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:226: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\n1 failed, 73 deselected in 0.83s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_ae_embedding", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1115, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1126, + 1128, + 1129, + 1130, + 1131, + 1133, + 1155, + 1156, + 1157, + 1158, + 1160, + 1161, + 1164, + 1166, + 1167, + 1217, + 1257, + 1262, + 1263, + 1264, + 1316, + 1353, + 1358, + 1472, + 1477, + 1598, + 1601, + 1602, + 1603, + 1640, + 1645, + 1773, + 1778, + 1779, + 1953, + 1957, + 1958, + 2004, + 2008, + 2009, + 2056, + 2063, + 2163, + 2167, + 2215, + 2220, + 2221, + 2222, + 2289, + 2294, + 2391, + 2396, + 2528, + 2534, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n1 passed, 73 deselected in 0.69s\n", + "stderr": "" + } + }, + { + "name": "C09_zoom_scalar_axes_supported", + "method": "plot_latent_zoomed", + "selection": "no_physical_columns and plot_latent_zoomed", + "changed_lines": [ + 2321, + 2322 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c3d12005048a8d692f607a4977148b4a708dcf18f570cbdb4bd3bf710e6347fa", + "patch": "--- \n+++ \n@@ -2318,6 +2318,7 @@\n ]\n \n fig, axes = plt.subplots(1, 1 + len(available), figsize=(22, 5), dpi=self.dpi)\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_latent_zoomed", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:224: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:226: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:224: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:226: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\n1 failed, 73 deselected in 0.82s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_latent_zoomed", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2324, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2335, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2343, + 2345, + 2381, + 2382, + 2384, + 2385, + 2387, + 2388, + 2389, + 2391, + 2396, + 2528, + 2534, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n1 passed, 73 deselected in 0.69s\n", + "stderr": "" + } + }, + { + "name": "C10_profile_single_slot", + "method": "plot_hdbscan_feature_profiles", + "selection": "cluster_profiles_unavailable and 1", + "changed_lines": [ + 2020 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "e56d76446680544910180a2a4f1e5d99b53d58361a1fff7f4980a2113d7c0ffb", + "patch": "--- \n+++ \n@@ -2017,7 +2017,7 @@\n ncols = 4\n nrows = (n_show + ncols - 1) // ncols\n fig, axes = plt.subplots(nrows, ncols, figsize=(5 * ncols, 4 * nrows), dpi=120)\n- axes_flat = axes.flatten() if n_show > 1 else [axes]\n+ axes_flat = np.asarray(axes).ravel()\n \n for ax_i, cid in zip(axes_flat, top_cids):\n profile = cluster_means.loc[cid]\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_profiles_unavailable and 1", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:244: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:243: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:244: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:243: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\n1 failed, 73 deselected in 0.90s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_profiles_unavailable and 1", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n1 passed, 73 deselected in 0.70s\n", + "stderr": "" + } + }, + { + "name": "C11_display_whole_trust_range", + "method": "plot_trustworthiness", + "selection": "trustworthiness_axis_contains", + "changed_lines": [ + 2279 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "ad1c94878e026d9ddc675825313ec1ed5709f1128675e1fe1487f0c7310149fc", + "patch": "--- \n+++ \n@@ -2276,7 +2276,7 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0, 1.01)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:337: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:337: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\n1 failed, 73 deselected in 2.72s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n1 passed, 73 deselected in 2.41s\n", + "stderr": "" + } + }, + { + "name": "C12_hide_unused_reconstructions", + "method": "plot_ae_reconstruction", + "selection": "more_reconstructions or reconstruction_drawn_rows", + "changed_lines": [ + 1179, + 1180, + 1181 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c80b84e92e07174091bbdc7418f60720c07530d8c68d7023c1a3961ee09beac6", + "patch": "--- \n+++ \n@@ -1176,6 +1176,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in axes[len(idx):]:\n+ unused.set_visible(False)\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions or reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:263: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "...F [100%]\n================================== FAILURES ===================================\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:263: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n1 failed, 3 passed, 70 deselected in 1.42s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions or reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1180, + 1181, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1196, + 1197, + 1198, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1210, + 1212, + 1213, + 1216, + 1218, + 1258, + 1263, + 1264, + 1265, + 1317, + 1354, + 1359, + 1473, + 1478, + 1599, + 1602, + 1603, + 1604, + 1641, + 1646, + 1774, + 1779, + 1780, + 1954, + 1958, + 1959, + 2005, + 2009, + 2010, + 2057, + 2064, + 2164, + 2168, + 2216, + 2221, + 2222, + 2223, + 2290, + 2295, + 2392, + 2397, + 2529, + 2535, + 2674, + 2679, + 2680, + 2803, + 2807, + 2865, + 2871, + 2872, + 2985, + 2988 + ], + "stdout": ".... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n4 passed, 70 deselected in 1.25s\n", + "stderr": "" + } + }, + { + "name": "F01_always_refuse_alignment", + "method": "plot_ae_recon_by_spectral_type", + "selection": "reconstruction_cardinality or spectral_type_means", + "changed_lines": [ + 2536, + 2537 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "e0e0abae314f5e5eb2996177d79dd93ed57a2e3f751236cfc0d37a00e3a0b195", + "patch": "--- \n+++ \n@@ -2533,6 +2533,7 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ raise RuntimeError(\"Observation alignment unavailable\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality or spectral_type_means", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:157: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".F [100%]\n================================== FAILURES ===================================\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:157: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\n1 failed, 1 passed, 72 deselected in 0.96s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality or spectral_type_means", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:318: in test_spectral_type_means_for_aligned_unequal_classes\n result = c.viz.plot_ae_recon_by_spectral_type(\nsrc\\dimred\\dimred_visualizer.py:2536: in plot_ae_recon_by_spectral_type\n raise RuntimeError(\"Observation alignment unavailable\")\nE RuntimeError: Observation alignment unavailable\n\nDuring handling of the above exception, another exception occurred:\ntests\\test_dimred_visualizer.py:322: in test_spectral_type_means_for_aligned_unequal_classes\n assert False, f\"Valid aligned reconstruction must remain usable: {exc}\"\nE AssertionError: Valid aligned reconstruction must remain usable: Observation alignment unavailable\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": "F. [100%]\n================================== FAILURES ===================================\n____________ test_spectral_type_means_for_aligned_unequal_classes _____________\ntests\\test_dimred_visualizer.py:318: in test_spectral_type_means_for_aligned_unequal_classes\n result = c.viz.plot_ae_recon_by_spectral_type(\nsrc\\dimred\\dimred_visualizer.py:2536: in plot_ae_recon_by_spectral_type\n raise RuntimeError(\"Observation alignment unavailable\")\nE RuntimeError: Observation alignment unavailable\n\nDuring handling of the above exception, another exception occurred:\ntests\\test_dimred_visualizer.py:322: in test_spectral_type_means_for_aligned_unequal_classes\n assert False, f\"Valid aligned reconstruction must remain usable: {exc}\"\nE AssertionError: Valid aligned reconstruction must remain usable: Observation alignment unavailable\nE assert False\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_spectral_type_means_for_aligned_unequal_classes\n1 failed, 1 passed, 72 deselected in 0.99s\n", + "stderr": "" + } + }, + { + "name": "F02_empty_hr", + "method": "plot_hr_teff_regions", + "selection": "hr_region_vertices", + "changed_lines": [ + 3160, + 3161 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "6bd35b2de52d08c61471145b27b92596e95f09e2266dd9e394fed28562632d61", + "patch": "--- \n+++ \n@@ -3157,6 +3157,7 @@\n cbar.ax.tick_params(labelsize=9)\n \n # \u2500\u2500 R\u00e9gions stellaires \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n+ REGIONS = []\n for region in REGIONS:\n patch = MplPolygon(\n np.array(region[\"poly\"]),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:127: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:127: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 73 deselected in 1.37s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert ax.patches, \"Valid HR regional figure must contain informative regions\"\nE AssertionError: Valid HR regional figure must contain informative regions\nE assert \nE + where = .patches" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3200, + 3204, + 3205, + 3206, + 3207, + 3209, + 3210, + 3212, + 3213, + 3214, + 3215, + 3217, + 3218, + 3220, + 3221, + 3223, + 3224 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:125: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert ax.patches, \"Valid HR regional figure must contain informative regions\"\nE AssertionError: Valid HR regional figure must contain informative regions\nE assert \nE + where = .patches\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 73 deselected in 1.19s\n", + "stderr": "" + } + } + ], + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930404 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768765 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561345 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9528308790780748 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:127: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000028D66CEF680>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000028D6733B3E0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:157: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:197: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 1.0 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.0 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.0 (DESIRED)\nE Max absolute difference among violations: 0.5204\nE Max relative difference among violations: 0.5204\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([1., 0., 0.])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:197: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 1.0 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.0 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.0 (DESIRED)\nE Max absolute difference among violations: 0.5204\nE Max relative difference among violations: 0.5204\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([1., 0., 0.])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x0000028D6735F4C0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:223: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:226: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:224: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:226: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:244: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:243: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:252: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:263: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:279: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and explained mass disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:292: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x0000028D670535E0>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:302: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:326: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1398/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:326: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1398/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:337: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1199, + 1200, + 1201, + 1202, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FFFFFFFFFFFF.FFFFFFFF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[real_scipy] ________\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930404 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768765 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561345 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9528308790780748 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:127: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000028D66CEF680>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:137: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000028D6733B3E0>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:157: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:197: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 1.0 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.0 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.0 (DESIRED)\nE Max absolute difference among violations: 0.5204\nE Max relative difference among violations: 0.5204\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([1., 0., 0.])\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:197: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 1.0 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.0 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.0 (DESIRED)\nE Max absolute difference among violations: 0.5204\nE Max relative difference among violations: 0.5204\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([1., 0., 0.])\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:211: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x0000028D6735F4C0>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:223: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:226: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:224: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:226: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:244: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:243: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:252: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:263: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:279: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and explained mass disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:292: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x0000028D670535E0>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:302: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:326: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1398/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:326: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1398/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:337: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-yfm6xy99\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[real_scipy]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\n20 failed, 1 passed in 8.41s\n", + "stderr": "" + }, + "protected_unchanged": false +} diff --git a/audit/m28_reverse_results.json b/audit/m28_reverse_results.json new file mode 100644 index 0000000..18d6172 --- /dev/null +++ b/audit/m28_reverse_results.json @@ -0,0 +1,2352 @@ +{ + "active_head": "d39988012c8cf5db6e7ca8a4be4c4abcf1c87f4d", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "288c8a9121dd3abf7d789705a7988352fe2ebce1fd611c7e73fa18b69f69da2a", + "tests/conftest.py": "73cbe56d283c68000626bb0de2bc9821a86ade182259648806222f4aaecdd99d" + }, + "mode": "reverse", + "runs": [], + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "..................................................... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-mt9q8u4y\\result.xml -\n53 passed in 14.71s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_validation_results.json b/audit/m28_validation_results.json new file mode 100644 index 0000000..b8f5aa8 --- /dev/null +++ b/audit/m28_validation_results.json @@ -0,0 +1,142 @@ +{ + "active_head": "d39988012c8cf5db6e7ca8a4be4c4abcf1c87f4d", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "executable": "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "versions": { + "numpy": "2.4.6", + "pandas": "3.1.1", + "scipy": "1.17.1", + "scikit-learn": "1.9.1", + "matplotlib": "3.11.2", + "pytest": "8.4.2", + "black": "24.4.2", + "ruff": "0.5.0", + "pillow": "13.0.0" + }, + "effective_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/conftest.py": "73cbe56d283c68000626bb0de2bc9821a86ade182259648806222f4aaecdd99d", + "tests/test_dimred_visualizer.py": "99edf78cd1fc7a256435cf809470f76d8bef0460c674f2a5d650795e3e00deb6" + }, + "commands": [ + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "-W", + "error", + "--junitxml=test-results/m28-targeted-validation.xml" + ], + "exit_code": 0, + "stdout": "..................................................... [100%]\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-targeted-validation.xml -\n53 passed in 6.73s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "--junitxml=test-results/m28-complete-validation.xml" + ], + "exit_code": 0, + "stdout": "........................................................................ [ 10%]\n........................................................................ [ 21%]\n........................................................................ [ 31%]\n........................................................................ [ 42%]\n........................................................................ [ 52%]\n........................................................................ [ 63%]\n........................................................................ [ 73%]\n........................................................................ [ 84%]\n........................................................................ [ 94%]\n..................................... [100%]\n============================== warnings summary ===============================\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_partial_esa_supplement_merges_without_losing_xmatch_rows\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_bulk_without_matches_stops_auto_fallback\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_cone_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_retry_limit_raises_or_falls_back_by_mode\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_transient_failure_retries_then_succeeds\n C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\tools\\gaia_crossmatcher.py:1210: Pandas4Warning: The inplace keyword in DataFrame.drop is deprecated and will be removed in a future version (PDEP-8).\n See https://pandas.pydata.org/docs/dev/whatsnew/v3.1.0.html#deprecation-inplace for more details.\n df_merged.drop(columns=[\"objid\"], inplace=True, errors=\"ignore\")\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-complete-validation.xml -\n685 passed, 62 deselected, 7 warnings in 20.31s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "--import-mode=importlib", + "--junitxml=test-results/m28-importlib-validation.xml" + ], + "exit_code": 0, + "stdout": "........................................................................ [ 10%]\n........................................................................ [ 21%]\n........................................................................ [ 31%]\n........................................................................ [ 42%]\n........................................................................ [ 52%]\n........................................................................ [ 63%]\n........................................................................ [ 73%]\n........................................................................ [ 84%]\n........................................................................ [ 94%]\n..................................... [100%]\n============================== warnings summary ===============================\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_partial_esa_supplement_merges_without_losing_xmatch_rows\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_bulk_without_matches_stops_auto_fallback\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_cone_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_retry_limit_raises_or_falls_back_by_mode\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_transient_failure_retries_then_succeeds\n C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\tools\\gaia_crossmatcher.py:1210: Pandas4Warning: The inplace keyword in DataFrame.drop is deprecated and will be removed in a future version (PDEP-8).\n See https://pandas.pydata.org/docs/dev/whatsnew/v3.1.0.html#deprecation-inplace for more details.\n df_merged.drop(columns=[\"objid\"], inplace=True, errors=\"ignore\")\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-importlib-validation.xml -\n685 passed, 62 deselected, 7 warnings in 20.29s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "black", + "--check", + "src", + "tests", + "scripts", + "app.py", + "audit/check_m28_evidence.py", + "audit/check_m28_boundaries.py", + "audit/check_m28_validation.py" + ], + "exit_code": 0, + "stdout": "", + "stderr": "All done! \u2728 \ud83c\udf70 \u2728\n45 files would be left unchanged.\n" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "ruff", + "check", + "src", + "tests", + "scripts", + "app.py", + "audit/check_m28_evidence.py", + "audit/check_m28_boundaries.py", + "audit/check_m28_validation.py" + ], + "exit_code": 0, + "stdout": "All checks passed!\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pip", + "check" + ], + "exit_code": 0, + "stdout": "No broken requirements found.\n", + "stderr": "" + }, + { + "command": [ + "git", + "diff", + "--check" + ], + "exit_code": 0, + "stdout": "", + "stderr": "warning: in the working copy of 'audit/check_m28_boundaries.py', LF will be replaced by CRLF the next time Git touches it\nwarning: in the working copy of 'audit/check_m28_evidence.py', LF will be replaced by CRLF the next time Git touches it\nwarning: in the working copy of 'tests/proofs_dimred_visualizer.py', LF will be replaced by CRLF the next time Git touches it\nwarning: in the working copy of 'tests/test_dimred_visualizer.py', LF will be replaced by CRLF the next time Git touches it\n" + }, + { + "command": [ + "git", + "diff", + "--exit-code", + "39dad874610745ccd456d26972e90f6fb3a11405", + "--", + "src", + "notebooks", + "data", + "models", + "requirements", + "pyproject.toml", + ".github", + "app.py", + "AGENTS.md" + ], + "exit_code": 0, + "stdout": "", + "stderr": "" + } + ], + "all_commands_passed": true +} diff --git a/tests/proofs_dimred_visualizer.py b/tests/proofs_dimred_visualizer.py index 60f2ec3..972116b 100644 --- a/tests/proofs_dimred_visualizer.py +++ b/tests/proofs_dimred_visualizer.py @@ -8,7 +8,7 @@ from types import SimpleNamespace import numpy as np -from numpy.testing import assert_allclose +from numpy.testing import assert_allclose, assert_array_equal import pandas as pd import pytest @@ -38,7 +38,7 @@ def call_or_domain_refusal(call, domain): def gaussian_population(n=250): rng = np.random.default_rng(1729) - Z = rng.normal(size=(n, 2)) + Z = rng.normal(size=(n, 2)) * [2.0, 3.0] meta = pd.DataFrame({"teff_gspphot": np.arange(n, dtype=float) + 3500}) return Z, np.array(["STAR"] * n), meta @@ -77,7 +77,9 @@ def __init__(self, data, **kwargs): pass def __call__(self, grid): - return np.exp(-np.sum(grid**2, axis=0) / 2) / (2 * np.pi) + return np.exp( + -np.sum((grid / np.array([[2.0], [3.0]])) ** 2, axis=0) / 2 + ) / (12 * np.pi) monkeypatch.setattr(scipy.stats, "gaussian_kde", StandardNormal) else: @@ -94,20 +96,21 @@ def __call__(self, grid): # The production display grid excludes tails (~1.6% in this fixture). # Integrate on an independent larger domain before comparing global mass. grid = np.linspace(-8, 8, 401) - gx, gy = np.meshgrid(grid, grid) + gx, gy = np.meshgrid(grid * 2, grid * 3) positions = np.vstack([gx.ravel(), gy.ravel()]) broad = ( - np.exp(-np.sum(positions**2, axis=0) / 2) / (2 * np.pi) + np.exp(-np.sum((positions / np.array([[2.0], [3.0]])) ** 2, axis=0) / 2) + / (12 * np.pi) if analytic else fitted[0](positions) ).reshape(gx.shape) - area = (grid[1] - grid[0]) ** 2 + area = 6 * (grid[1] - grid[0]) ** 2 assert_allclose(broad.sum() * area, 1, atol=1e-7) masses = [] for level in cs.levels: mass = broad[broad >= level].sum() * area if analytic: - assert_allclose(mass, 1 - 2 * np.pi * level, atol=0.006) + assert_allclose(mass, max(0.0, 1 - 12 * np.pi * level), atol=0.006) masses.append(mass) # Level order low->high corresponds to enclosed masses high->low. assert_allclose( @@ -162,22 +165,35 @@ def test_reconstruction_cardinality_cannot_reassign_spectral_classes(visualizer_ @pytest.mark.parametrize("name", ["plot_hdbscan_clusters", "plot_hdbscan_hr"]) -def test_cluster_colorbar_matches_actual_cluster_rgb(visualizer_case, name): +def test_cluster_colorbar_matches_actual_cluster_rgb( + visualizer_case, hdbscan_module, name +): c = visualizer_case - colors = {-1: (0.8, 0.8, 0.8, 1), 2: (1, 0, 0, 1), 7: (0, 0, 1, 1)} - hdb = SimpleNamespace( - labels_=np.array([2, -1, 7, 2, 7, 2]), - cluster_ids_=[2, 7], - color_map_=colors, - n_clusters_=2, - n_noise_=1, - ) + hdb = hdbscan_module.HDBSCANAnalyzer() + hdb.labels_ = np.array([2, -1, 7, 2, 7, 2]) + hdb._compute_stats() + hdb._build_palette() fig, axes = getattr(c.viz, name)( c.Z, hdb, c.y if name.endswith("clusters") else c.meta ) - cb = next( - a._colorbar for a in fig.axes if getattr(a, "_colorbar", None) is not None - ) + colorbars = [ + a._colorbar + for a in fig.axes + if getattr(a, "_colorbar", None) is not None + and a._colorbar.ax.get_ylabel() == "Cluster ID" + ] + if not colorbars: + for cid, sc in zip([2, 7], axes[0].collections[1:]): + annotation = next( + (t for t in axes[0].texts if t.get_text() == f"C{cid}"), None + ) + assert annotation is not None, "Cluster identity must remain interpretable" + assert_allclose( + annotation.get_bbox_patch().get_facecolor()[:3], + sc.get_facecolors()[0, :3], + ) + return + cb = colorbars[0] for collection, cid in zip(axes[0].collections[1:], [2, 7]): assert_allclose( cb.mappable.to_rgba(cid)[:3], @@ -258,7 +274,15 @@ def test_truncated_variance_annotation_does_not_attribute_wrong_mass(visualizer_ ) _, axes = c.viz.plot_variance_explained(pca, threshold=0.95, max_pcs=2) annotations = " ".join(t.get_text() for t in axes[1].texts) - assert "3 PCs\n→ 85.0%" not in annotations, annotations + claims = re.findall(r"(\d+) PCs\s*[^\d]*([\d.]+)%", annotations) + for count, percentage in claims: + true_mass = sum(pca.explained_variance_ratio[: int(count)]) * 100 + assert_allclose( + float(percentage), + true_mass, + atol=0.05, + err_msg="Annotated PC count and explained mass disagree", + ) def test_log_histogram_keeps_small_positive_errors(visualizer_case): @@ -274,7 +298,15 @@ def test_log_histogram_keeps_small_positive_errors(visualizer_case): def test_histogram_does_not_silently_omit_fifth_class(visualizer_case): c = visualizer_case labels = np.array(["A", "B", "C", "D", "E", "E"]) - _, ax = c.viz.plot_ae_error_distribution(np.array([1.0, 2, 3, 4, 5, 9]), labels) + result = call_or_domain_refusal( + lambda: c.viz.plot_ae_error_distribution( + np.array([1.0, 2, 3, 4, 5, 9]), labels + ), + ["class", "palette", "population"], + ) + if result is None: + return + _, ax = result represented = {label.split(" ")[0] for label in ax.get_legend_handles_labels()[1]} assert represented == set(labels), "Palette length silently drops classes" @@ -312,3 +344,19 @@ def test_trustworthiness_axis_contains_computed_values(visualizer_case): lo, hi = sorted(ax.get_ylim()) vals = np.concatenate([line.get_ydata() for line in ax.lines[:2]]) assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi)) + + +def test_default_eigenspectrum_line_labels_are_renderable(visualizer_case): + c = visualizer_case + pca = SimpleNamespace( + loadings=np.array([[0.1, -0.4, 0.9, -0.2]]), + explained_variance_ratio=np.array([1.0]), + ) + try: + fig, axes = c.viz.plot_eigenspectra( + pca, np.array([3800.0, 4400.0, 5500.0, 6800.0]), n_components=1 + ) + fig.canvas.draw() + except Exception as exc: + assert False, f"Valid default eigen-spectrum labels must render: {exc}" + assert_array_equal(axes[0].lines[0].get_ydata(), pca.loadings[0]) diff --git a/tests/test_dimred_visualizer.py b/tests/test_dimred_visualizer.py index 67caf5d..f8f7624 100644 --- a/tests/test_dimred_visualizer.py +++ b/tests/test_dimred_visualizer.py @@ -320,6 +320,9 @@ def test_spectral_type_means_for_aligned_unequal_classes(visualizer_case): ) except Exception as exc: assert False, f"Valid aligned reconstruction must remain usable: {exc}" + assert ( + isinstance(result, tuple) and result[0] is not None + ), "Valid aligned data need an informative figure" _, axes = result assert_allclose(heights(axes[0]), [4.5, 28.5, 6.5, 25.5]) assert_allclose(heights(axes[1]), [15.5, 1513 / 6, 17.5, 1513 / 6 - 3]) From 4364c61f56d91f7ec93c5c6072b9f88c46023241 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Tue, 10 Nov 2026 22:20:33 -0500 Subject: [PATCH 3/8] test(dimred): isolate visualizer red archive and finalize M2.8 handoff --- audit/M28_DIMRED_VISUALIZER.md | 139 +- audit/M28_PROOFS.md | 6 +- audit/check_m28_evidence.py | 17 + audit/m28_archive_replay_results.json | 1223 +++++++++++++++++ audit/m28_final_quality_results.json | 102 ++ ...m28_green_head_archive_replay_results.json | 1223 +++++++++++++++++ audit/m28_issue_index.json | 95 ++ tests/proofs_dimred_visualizer.py | 362 ----- 8 files changed, 2799 insertions(+), 368 deletions(-) create mode 100644 audit/m28_archive_replay_results.json create mode 100644 audit/m28_final_quality_results.json create mode 100644 audit/m28_green_head_archive_replay_results.json create mode 100644 audit/m28_issue_index.json delete mode 100644 tests/proofs_dimred_visualizer.py diff --git a/audit/M28_DIMRED_VISUALIZER.md b/audit/M28_DIMRED_VISUALIZER.md index f2badfe..14f51e5 100644 --- a/audit/M28_DIMRED_VISUALIZER.md +++ b/audit/M28_DIMRED_VISUALIZER.md @@ -36,8 +36,9 @@ gives1; a row permutation changes neighborhoods. Subsampling is paired and repeatable; this cannot establish the external identity of supplied observations. [Primary definition and domain](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.trustworthiness.html). -KDE uses actual SciPy plus a separately injected analytic standard normal. -For the latter, polar integration gives enclosed mass `1-2*pi*threshold`. +KDE uses actual SciPy plus a separately injected analytic Gaussian with known +covariance diag(4,9). Polar integration gives enclosed mass +`max(0,1-12*pi*threshold)`. An independent larger401x401 quadrature domain includes tails omitted by the display grid. The601x601 green oracle control verifies known68/95/99% solutions within.002. Red numerical comparisons allow.006 for contour-cell discretization, @@ -110,7 +111,7 @@ is needed. #78 noise/population interpretation, #84 training loss aggregation, #85 interpolation physical claims, #89 preprocessing and #90 probability definition remain open. M2.8 tests do not turn these into approved policy. -## Checkpoint +## Initial checkpoint Initial dedicated suite53PASS (Windows/Python3.11.9, matplotlib3.11.2, numpy2.4.6, pandas3.1.1, scipy1.17.1, sklearn1.9.1), with real Agg rendering. @@ -126,3 +127,135 @@ calibration, genuine Gaia source identity, actual UMAP/t-SNE/AE refitting here, GPU/W&B/network, visual publication review, cross-version image/PDF agreement, all filesystem failures, notebook execution and line coverage. No claim of historical figure corruption without its actual run artifact. + +## Delivered evidence and first independent review + +**53 dedicated green cases**, actual Windows/Python3.11.9 execution: +[validation ledger](m28_validation_results.json). Normal and importlib full +suites each **685PASS/62deselected/7preexisting Gaia warnings**. Dedicated suite +`-W error` **53PASS**. [Reversed collection/hashseed7](m28_reverse_results.json) +also53PASS. Black/Ruff, pip check and protected-path diff allPASS. The tests +actually render with Agg; no tight_layout/savefig/artist method is bypassed. +PDF verification is limited to format header/trailer and successful backend +write; PNG is opened/verified with Pillow and checked for informative pixels. +PDF scientific layout and text extraction remain PA, not certified. + +The ledgers record the active parent HEAD and effective LF source/test hashes +separately. Effective tested files are unchanged by subsequent documentary +commits. The module is imported from its actual file in an isolated package +namespace, with real bridge local imports. The optional facade is bypassed +(#21), not declared generally importable or audited under M2.9. rcParams and +temporary sys.modules entries are restored; every newly created figure closes. +The backend remains Agg for the offline test process, matching CI configuration. + +### Findings and duplicate exclusions + +All15 findings have separate corrective issues after open/closed inventory +and visualizer/KDE/colorbar searches. **No production correction in this PR.** +D01 was already identified in M1/#43; the other mechanisms were hypotheses or +new reproductions. They are not15new astrophysical discoveries. P1 for false +KDE probability/observation reassignment; P2 for bounded representation and +robustness findings. Historical incidence/impact is unmeasured. + +| Proof ID | Corrective issue | Evidence classification | +|---|---|---| +| D01 | [#101 KDE probability mass](https://github.com/PhD-Brown/AstroSpectro/issues/101) | AP demonstrated; M1 risk reverified numerically | +| D02 | [#102 HR gravity units](https://github.com/PhD-Brown/AstroSpectro/issues/102) | AP polygon geometry defect | +| D03 | [#103 hardcoded population](https://github.com/PhD-Brown/AstroSpectro/issues/103) | AP displayed count mismatch | +| D04 | [#104 reconstruction identity](https://github.com/PhD-Brown/AstroSpectro/issues/104) | AP wrong group mean after truncation | +| D05 | [#105 cluster colorbar](https://github.com/PhD-Brown/AstroSpectro/issues/105) | AP mismatch for nonconsecutive IDs; default contiguous fit unaffected in these examples | +| D06 | [#106 probability availability](https://github.com/PhD-Brown/AstroSpectro/issues/106) | AP invalid inference from ones; provenance policy open | +| D07 | [#107 class-only AE plots](https://github.com/PhD-Brown/AstroSpectro/issues/107) | AP scalar-Axes crash | +| D08 | [#108 profile panels](https://github.com/PhD-Brown/AstroSpectro/issues/108) | AP one-slot crash/unused-slot presentation | +| D09 | [#109 reconstruction panels](https://github.com/PhD-Brown/AstroSpectro/issues/109) | AP unused-slot presentation | +| D10 | [#110 variance annotations](https://github.com/PhD-Brown/AstroSpectro/issues/110) | AP count/percentage mismatch | +| D11 | [#111 small positive MSEs](https://github.com/PhD-Brown/AstroSpectro/issues/111) | AP dropped observations in log bins | +| D12 | [#112 fifth class](https://github.com/PhD-Brown/AstroSpectro/issues/112) | AP omission outside usual <=4LAMOST classes | +| D13 | [#113 default export directory](https://github.com/PhD-Brown/AstroSpectro/issues/113) | AP ignored configured output for two direct exporters; others statically similar | +| D14 | [#114 hidden trustworthiness](https://github.com/PhD-Brown/AstroSpectro/issues/114) | AP computed low values outside displayed range | +| D15 | [#115 default Balmer labels](https://github.com/PhD-Brown/AstroSpectro/issues/115) | AP nominal default rendering failure; NB01 supplies custom labels | + +Existing #50/#73/#88 do not repair a renderer's own truncation. #90 is the +producer probability boundary, whereas #106 concerns its consumer's missing +availability input. #59 concerns unattainable producer targets, whereas #110 +concerns an attainable full-model target with a truncated display. #65/#78/ +#84/#85/#89/#95/#100 remain linked without duplicate issues or implied fixes. + +### Mutation and admissible controls + +[Final green mutation replay](m28_mutation_results.json): baseline53PASS, +**16KILLED/0SURVIVED**, all selected edited sites reached, matching per-selection +collection and assertion failures only. [Initial replay](m28_mutation_initial_results.json) +is preserved. Each mutant is run on the named targeted selection, not claimed +to have executed the whole repository. No perfect mutation coverage is inferred. + +| Mutants | Independent contract exercised | +|---|---| +| M01/M07/M08/M10/M11/M15 | Row/class/HR/cluster/confidence/method/KDE population association | +| M02/M03/M04/M05/M06/M12/M13/M14 | Fraction-to-percent, bestepoch, mean-not-median, distinct AE/PCA MSE, reconstruction, signed profile, normalized density | +| M09 | Real sklearn trustworthiness compared with independent ranks | +| M16 | Blank saved figure rejected by real PNG pixel variation | + +[Admissible/false-remedy campaign](m28_evidence_final_results.json) contains +C01–C12/C14PASS and F01/F02KILLED. Its C13/F03 isotropic results are superseded +**only for KDE** by [final anisotropic replay](m28_kde_final_results.json): +C13 integrated thresholds PASS, F03 fixed normal thresholds KILLED (two +assertions, same selected collection). Thus **14 admitted alternatives and +three rejected false remedies**, separate from16incorrect mutants. Baselines, +patches, traces and failure texts are retained. Aesthetic palette change and +alternative canvas export pass. Invalid-length explicit refusal passes while +permanent refusal fails on a valid aligned population; empty HR regions fail. + +Initial audit mistakes remain visible: fixture import order, a tied variance +ranking fixture, AST bare-return handling, multiline constant trace attribution +and an insufficiently discriminating isotropic KDE. The final anisotropic +analytic oracle handles density thresholds above the peak with mass0. These +are corrections to audit instrumentation/oracles, never production edits. + +### Immutable red archive and boundary observations + +Designated single final archive: +**[ed1d91ec0efb619aeb77a5bf7e4a0ab43fa84cac](https://github.com/PhD-Brown/AstroSpectro/tree/ed1d91ec0efb619aeb77a5bf7e4a0ab43fa84cac)**, +ref `audit/43-dimred-visualizer-proofs`, also an ancestor of the integration +head. Pushed SHA verified and proof file read back through GitHub **before** +normal removal from the green head. [Exact archive replay](m28_archive_replay_results.json) +**21FAIL/1PASS/0ERROR/SKIP** on22cases. [Green-head reconstruction replay](m28_green_head_archive_replay_results.json) +has the same results. [Proof manifest](M28_PROOFS.md), issues and +[issue index](m28_issue_index.json) link the same immutable source. + +```powershell +python audit/check_m28_evidence.py --mode baseline +python audit/check_m28_evidence.py --mode proofs --proofs-ref ed1d91ec0efb619aeb77a5bf7e4a0ab43fa84cac +python audit/check_m28_evidence.py --mode mutations +python audit/check_m28_boundaries.py --output test-results/m28-boundaries.json +``` + +The default reconstruction ref activates only when the explicit proof file is +absent. The runner checks that current production equals the selected archive, +then restores exact proof/fixture/green bytes in its own disposable tree. +Earlier checkpointd399880 also remains an ancestor, but is not advertised as a +second final archive. All old ledgers remain byte-identical. + +[Final boundary ledger](m28_boundary_final_results.json): **38actual method +signatures/44observations**, plus static notebook calls. Initial38observations +remain in [initial ledger](m28_boundary_results.json). These are PA observations, +not green assertions freezing an invalid-input policy: noSTAR/singleton/two +points/collinear/nonfinite KDE, missing physical data, empty HR, zero/negative/ +nonfinite MSE, invalidsamplecount/k, emptyhistory/stability and zero family +weights. Eigenspectrum default parser failure became D15. Out-of-range, +NaN/Inf supplied confidence can be accepted/clipped/masked; this remains PA +at the consumer and linked to #90/#106, not claimed as calibrated probabilities. +Collinear/two-point backend acceptance can depend on floating covariance; +no successful density computation alone certifies a meaningful2D population. + +### Questions for Claude + +Challenge numerical oracles and adapter limits first: KDE grid tails and label +meaning; mismatched population refusal versus information unavailable to the +API; colorbar versus categorical alternatives; between-feature dispersion; +annotation grammar/diagnostic keyword bounds; fixture state restoration; actual +render/export limits. Assess fixed183feature/3PC/min_size300 titles, [M/H] +versus[Fe/H] conventions and noise-as-anomaly prose as PA/open interpretation +(#65/#78), not validated taxonomy. Review display clipping/zero/nonfinite and +missing-panel policies before any production correction. No M2.9 work or +review correction is authorized before this first independent review. diff --git a/audit/M28_PROOFS.md b/audit/M28_PROOFS.md index 3adfa59..46eb98f 100644 --- a/audit/M28_PROOFS.md +++ b/audit/M28_PROOFS.md @@ -5,7 +5,7 @@ production visualizer blob624b857bca5833c3401204b0a592b9ae6ffc2902 unchanged. `tests/proofs_dimred_visualizer.py` is explicitly executed, never discovered by the normal test naming pattern. It is committed in one final archive, pushed/read back, then removed normally from the Draft PR head. No xfail. -The designated archive SHA is linked in the matrix after it exists; its +The designated archive is **ed1d91ec0efb619aeb77a5bf7e4a0ab43fa84cac**; its ancestry preserves exact conftest, green tests, source, scripts and results. Final baseline: **22 cases,21FAIL/1PASS/0ERROR/SKIP**. This is **15 grouped @@ -42,8 +42,8 @@ python -m pytest -q tests/proofs_dimred_visualizer.py --tb=short From the green checkout with the fixed archive SHA: ```powershell -python audit/check_m28_evidence.py --mode baseline --proofs-ref ARCHIVE_SHA -python audit/check_m28_evidence.py --mode proofs --proofs-ref ARCHIVE_SHA +python audit/check_m28_evidence.py --mode baseline --proofs-ref ed1d91ec0efb619aeb77a5bf7e4a0ab43fa84cac +python audit/check_m28_evidence.py --mode proofs --proofs-ref ed1d91ec0efb619aeb77a5bf7e4a0ab43fa84cac ``` The runner reads exact proof/green/fixture bytes from Git into its own synthetic diff --git a/audit/check_m28_evidence.py b/audit/check_m28_evidence.py index e4ee077..0f9ccf4 100644 --- a/audit/check_m28_evidence.py +++ b/audit/check_m28_evidence.py @@ -375,6 +375,12 @@ def main(): parser.add_argument("--proofs-ref") parser.add_argument("--only", nargs="+") args = parser.parse_args() + if ( + args.proofs_ref is None + and not (ROOT / PROOF).exists() + and args.mode in ["baseline", "proofs"] + ): + args.proofs_ref = "ed1d91ec0efb619aeb77a5bf7e4a0ab43fa84cac" protected = [SOURCE, GREEN, "tests/conftest.py"] before = {p: digest(ROOT / p) for p in protected} source = (ROOT / SOURCE).read_text(encoding="utf-8") @@ -433,6 +439,17 @@ def main(): for p in [GREEN, "tests/conftest.py", "pyproject.toml"]: shutil.copy2(ROOT / p, tree / p) if args.proofs_ref: + archived_source = ( + subprocess.check_output( + ["git", "show", f"{args.proofs_ref}:{SOURCE}"], cwd=ROOT + ) + .decode("utf-8") + .replace("\r\n", "\n") + ) + if archived_source != source: + raise RuntimeError( + "Production differs from the selected M2.8 proof archive; use its checkout" + ) for p in [PROOF, GREEN, "tests/conftest.py"]: content = subprocess.check_output( ["git", "show", f"{args.proofs_ref}:{p}"], cwd=ROOT diff --git a/audit/m28_archive_replay_results.json b/audit/m28_archive_replay_results.json new file mode 100644 index 0000000..da65cf5 --- /dev/null +++ b/audit/m28_archive_replay_results.json @@ -0,0 +1,1223 @@ +{ + "active_head": "ed1d91ec0efb619aeb77a5bf7e4a0ab43fa84cac", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "99edf78cd1fc7a256435cf809470f76d8bef0460c674f2a5d650795e3e00deb6", + "tests/conftest.py": "73cbe56d283c68000626bb0de2bc9821a86ade182259648806222f4aaecdd99d" + }, + "mode": "baseline", + "runs": [], + "proofs_ref": "ed1d91ec0efb619aeb77a5bf7e4a0ab43fa84cac", + "executed_files_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "99edf78cd1fc7a256435cf809470f76d8bef0460c674f2a5d650795e3e00deb6", + "tests/conftest.py": "73cbe56d283c68000626bb0de2bc9821a86ade182259648806222f4aaecdd99d", + "tests/proofs_dimred_visualizer.py": "05beb617478fa7d3d4d341381f83b638ba95895c6b8b73f7e0592ea50d6faf06" + }, + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930403 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768764 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561349 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.952830879078075 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:130: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:140: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000019160E402E0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:140: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001916104A5E0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:160: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:198: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:198: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:212: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x00000191610852A0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:224: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:227: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:225: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:227: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:245: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:244: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:253: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:264: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:280: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and explained mass disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:293: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x000001916080F920>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:311: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:335: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1420/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:335: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1420/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:346: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:356: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:361: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1199, + 1200, + 1201, + 1202, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FFFFFFFFFFFF.FFFFFFFFF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[real_scipy] ________\ntests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930403 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768764 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561349 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.952830879078075 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:130: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:140: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000019160E402E0>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:140: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001916104A5E0>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:160: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:198: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:198: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:212: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x00000191610852A0>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:224: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:227: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:225: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:227: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:245: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:244: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:253: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:264: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:280: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and explained mass disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:293: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x000001916080F920>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:311: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:335: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1420/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:335: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1420/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:346: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:356: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:361: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-232fg1ge\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[real_scipy]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\n21 failed, 1 passed in 9.32s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_final_quality_results.json b/audit/m28_final_quality_results.json new file mode 100644 index 0000000..7af9347 --- /dev/null +++ b/audit/m28_final_quality_results.json @@ -0,0 +1,102 @@ +{ + "active_head": "ed1d91ec0efb619aeb77a5bf7e4a0ab43fa84cac", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "executable": "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "versions": { + "numpy": "2.4.6", + "pandas": "3.1.1", + "scipy": "1.17.1", + "scikit-learn": "1.9.1", + "matplotlib": "3.11.2", + "pytest": "8.4.2", + "black": "24.4.2", + "ruff": "0.5.0", + "pillow": "13.0.0" + }, + "effective_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/conftest.py": "73cbe56d283c68000626bb0de2bc9821a86ade182259648806222f4aaecdd99d", + "tests/test_dimred_visualizer.py": "99edf78cd1fc7a256435cf809470f76d8bef0460c674f2a5d650795e3e00deb6" + }, + "commands": [ + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "black", + "--check", + "src", + "tests", + "scripts", + "app.py", + "audit/check_m28_evidence.py", + "audit/check_m28_boundaries.py", + "audit/check_m28_validation.py" + ], + "exit_code": 0, + "stdout": "", + "stderr": "All done! \u2728 \ud83c\udf70 \u2728\n44 files would be left unchanged.\n" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "ruff", + "check", + "src", + "tests", + "scripts", + "app.py", + "audit/check_m28_evidence.py", + "audit/check_m28_boundaries.py", + "audit/check_m28_validation.py" + ], + "exit_code": 0, + "stdout": "All checks passed!\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pip", + "check" + ], + "exit_code": 0, + "stdout": "No broken requirements found.\n", + "stderr": "" + }, + { + "command": [ + "git", + "diff", + "--check" + ], + "exit_code": 0, + "stdout": "", + "stderr": "warning: in the working copy of 'audit/M28_DIMRED_VISUALIZER.md', LF will be replaced by CRLF the next time Git touches it\nwarning: in the working copy of 'audit/check_m28_evidence.py', LF will be replaced by CRLF the next time Git touches it\n" + }, + { + "command": [ + "git", + "diff", + "--exit-code", + "39dad874610745ccd456d26972e90f6fb3a11405", + "--", + "src", + "notebooks", + "data", + "models", + "requirements", + "pyproject.toml", + ".github", + "app.py", + "AGENTS.md" + ], + "exit_code": 0, + "stdout": "", + "stderr": "" + } + ], + "all_commands_passed": true +} diff --git a/audit/m28_green_head_archive_replay_results.json b/audit/m28_green_head_archive_replay_results.json new file mode 100644 index 0000000..bffcd91 --- /dev/null +++ b/audit/m28_green_head_archive_replay_results.json @@ -0,0 +1,1223 @@ +{ + "active_head": "ed1d91ec0efb619aeb77a5bf7e4a0ab43fa84cac", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "99edf78cd1fc7a256435cf809470f76d8bef0460c674f2a5d650795e3e00deb6", + "tests/conftest.py": "73cbe56d283c68000626bb0de2bc9821a86ade182259648806222f4aaecdd99d" + }, + "mode": "baseline", + "runs": [], + "proofs_ref": "ed1d91ec0efb619aeb77a5bf7e4a0ab43fa84cac", + "executed_files_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "99edf78cd1fc7a256435cf809470f76d8bef0460c674f2a5d650795e3e00deb6", + "tests/conftest.py": "73cbe56d283c68000626bb0de2bc9821a86ade182259648806222f4aaecdd99d", + "tests/proofs_dimred_visualizer.py": "05beb617478fa7d3d4d341381f83b638ba95895c6b8b73f7e0592ea50d6faf06" + }, + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930403 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768764 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561349 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.952830879078075 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:130: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:140: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001A02EB682E0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:140: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001A02ED6A5E0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:160: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:198: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:198: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:212: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000001A02EE052A0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:224: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:227: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:225: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:227: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:245: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:244: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:253: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:264: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:280: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and explained mass disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:293: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x000001A02E50F920>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:311: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:335: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1421/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:335: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1421/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:346: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:356: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:361: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1199, + 1200, + 1201, + 1202, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FFFFFFFFFFFF.FFFFFFFFF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[real_scipy] ________\ntests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930403 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768764 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561349 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.952830879078075 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:130: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:140: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001A02EB682E0>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:140: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001A02ED6A5E0>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:160: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:198: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:198: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:212: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000001A02EE052A0>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:224: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:227: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:225: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:227: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:245: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:244: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:253: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:264: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:280: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and explained mass disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:293: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x000001A02E50F920>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:311: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:335: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1421/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:335: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1421/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:346: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:356: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:361: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-9j4_9rm_\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[real_scipy]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\n21 failed, 1 passed in 9.41s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_issue_index.json b/audit/m28_issue_index.json new file mode 100644 index 0000000..cb88ccc --- /dev/null +++ b/audit/m28_issue_index.json @@ -0,0 +1,95 @@ +{ + "archive": "ed1d91ec0efb619aeb77a5bf7e4a0ab43fa84cac", + "issues": [ + { + "id": "D01", + "number": 101, + "title": "fix: derive latent KDE contour labels from enclosed probability mass", + "url": "https://github.com/PhD-Brown/AstroSpectro/issues/101" + }, + { + "id": "D02", + "number": 102, + "title": "fix: keep HR region polygon margins in gravity units", + "url": "https://github.com/PhD-Brown/AstroSpectro/issues/102" + }, + { + "id": "D03", + "number": 103, + "title": "fix: count or omit the HR figure stellar population label", + "url": "https://github.com/PhD-Brown/AstroSpectro/issues/103" + }, + { + "id": "D04", + "number": 104, + "title": "fix: reject reconstruction population mismatches before spectral grouping", + "url": "https://github.com/PhD-Brown/AstroSpectro/issues/104" + }, + { + "id": "D05", + "number": 105, + "title": "fix: make HDBSCAN colorbars agree with plotted cluster colors", + "url": "https://github.com/PhD-Brown/AstroSpectro/issues/105" + }, + { + "id": "D06", + "number": 106, + "title": "fix: carry probability availability into XGBoost visualizations", + "url": "https://github.com/PhD-Brown/AstroSpectro/issues/106" + }, + { + "id": "D07", + "number": 107, + "title": "fix: support class-only AE plots without scalar subplot crashes", + "url": "https://github.com/PhD-Brown/AstroSpectro/issues/107" + }, + { + "id": "D08", + "number": 108, + "title": "fix: size HDBSCAN profile panels from actual selected clusters", + "url": "https://github.com/PhD-Brown/AstroSpectro/issues/108" + }, + { + "id": "D09", + "number": 109, + "title": "fix: omit empty AE reconstruction panels when samples exceed rows", + "url": "https://github.com/PhD-Brown/AstroSpectro/issues/109" + }, + { + "id": "D10", + "number": 110, + "title": "fix: keep PCA variance annotations consistent when display is truncated", + "url": "https://github.com/PhD-Brown/AstroSpectro/issues/110" + }, + { + "id": "D11", + "number": 111, + "title": "fix: retain small positive MSE values in logarithmic histograms", + "url": "https://github.com/PhD-Brown/AstroSpectro/issues/111" + }, + { + "id": "D12", + "number": 112, + "title": "fix: avoid dropping reconstruction-error classes beyond the palette", + "url": "https://github.com/PhD-Brown/AstroSpectro/issues/112" + }, + { + "id": "D13", + "number": 113, + "title": "fix: honor configured output directories in direct AE plot exports", + "url": "https://github.com/PhD-Brown/AstroSpectro/issues/113" + }, + { + "id": "D14", + "number": 114, + "title": "fix: display computed trustworthiness values below the fixed plot floor", + "url": "https://github.com/PhD-Brown/AstroSpectro/issues/114" + }, + { + "id": "D15", + "number": 115, + "title": "fix: render default Balmer labels in PCA eigenspectra", + "url": "https://github.com/PhD-Brown/AstroSpectro/issues/115" + } + ] +} diff --git a/tests/proofs_dimred_visualizer.py b/tests/proofs_dimred_visualizer.py deleted file mode 100644 index 972116b..0000000 --- a/tests/proofs_dimred_visualizer.py +++ /dev/null @@ -1,362 +0,0 @@ -"""Explicit M2.8 counterexamples; archived and removed from the green head. - -No xfail and no production edits. Refusal, masking and unavailable outputs are -alternatives on invalid data; valid positive cases are in the green suite. -""" - -import re -from types import SimpleNamespace - -import numpy as np -from numpy.testing import assert_allclose, assert_array_equal -import pandas as pd -import pytest - - -def call_or_domain_refusal(call, domain): - """Permit relevant explicit refusal, never accept incidental backend errors.""" - try: - return call() - except (ValueError, RuntimeError) as exc: - message = str(exc).lower() - assert any(word in message for word in domain), message - assert not any( - word in message - for word in [ - "concatenate", - "percentile", - "0 columns", - "singular data covariance", - ] - ), message - return None - except Exception as exc: - pytest.fail( - f"Incidental {type(exc).__name__} instead of explicit domain handling: {exc}" - ) - - -def gaussian_population(n=250): - rng = np.random.default_rng(1729) - Z = rng.normal(size=(n, 2)) * [2.0, 3.0] - meta = pd.DataFrame({"teff_gspphot": np.arange(n, dtype=float) + 3500}) - return Z, np.array(["STAR"] * n), meta - - -@pytest.mark.parametrize( - "analytic", [False, True], ids=["real_scipy", "analytic_normal"] -) -def test_kde_labeled_regions_enclose_probability_mass( - visualizer_case, monkeypatch, analytic -): - c = visualizer_case - Z, y, meta = gaussian_population() - observed = [] - from matplotlib.axes import Axes - import scipy.stats - - original = Axes.contour - real_kde = scipy.stats.gaussian_kde - fitted = [] - - def fit(data, **kwargs): - estimator = real_kde(data, **kwargs) - fitted.append(estimator) - return estimator - - def contour(ax, XX, YY, density, *args, **kwargs): - result = original(ax, XX, YY, density, *args, **kwargs) - observed.append((XX.copy(), YY.copy(), density.copy(), result)) - return result - - monkeypatch.setattr(Axes, "contour", contour) - if analytic: - - class StandardNormal: - def __init__(self, data, **kwargs): - pass - - def __call__(self, grid): - return np.exp( - -np.sum((grid / np.array([[2.0], [3.0]])) ** 2, axis=0) / 2 - ) / (12 * np.pi) - - monkeypatch.setattr(scipy.stats, "gaussian_kde", StandardNormal) - else: - monkeypatch.setattr(scipy.stats, "gaussian_kde", fit) - c.viz.plot_latent_kde(Z, y, meta) - assert observed, "Valid nominal KDE must contain informative contours" - XX, YY, density, cs = observed[0] - # Quadrature over actual plotted grid, with endpoint half-cell weights. - weights = np.ones(density.shape) - weights[[0, -1], :] *= 0.5 - weights[:, [0, -1]] *= 0.5 - cell = (XX[0, 1] - XX[0, 0]) * (YY[1, 0] - YY[0, 0]) - assert 0.98 < np.sum(weights * density) * cell < 1.01 - # The production display grid excludes tails (~1.6% in this fixture). - # Integrate on an independent larger domain before comparing global mass. - grid = np.linspace(-8, 8, 401) - gx, gy = np.meshgrid(grid * 2, grid * 3) - positions = np.vstack([gx.ravel(), gy.ravel()]) - broad = ( - np.exp(-np.sum((positions / np.array([[2.0], [3.0]])) ** 2, axis=0) / 2) - / (12 * np.pi) - if analytic - else fitted[0](positions) - ).reshape(gx.shape) - area = 6 * (grid[1] - grid[0]) ** 2 - assert_allclose(broad.sum() * area, 1, atol=1e-7) - masses = [] - for level in cs.levels: - mass = broad[broad >= level].sum() * area - if analytic: - assert_allclose(mass, max(0.0, 1 - 12 * np.pi * level), atol=0.006) - masses.append(mass) - # Level order low->high corresponds to enclosed masses high->low. - assert_allclose( - masses, - [0.99, 0.95, 0.68], - atol=0.006, - err_msg="Density-height percentiles are not probability masses", - ) - - -def test_hr_region_vertices_have_gravity_units_and_stay_in_domain(visualizer_case): - c = visualizer_case - _, ax = c.viz.plot_hr_teff_regions(c.meta) - low, high = sorted(ax.get_ylim()) - assert ax.patches, "Valid HR regional figure must contain informative regions" - vertices = np.vstack([p.get_xy() for p in ax.patches]) - assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices - - -@pytest.mark.parametrize("n", [6, 9]) -def test_hr_population_title_is_counted_or_omitted(visualizer_case, n): - c = visualizer_case - meta = pd.concat([c.meta, c.meta.iloc[:3]], ignore_index=True).iloc[:n] - _, ax = c.viz.plot_hr_teff_regions(meta) - title = ax.get_title().replace(" ", "").replace("\u202f", "") - counts = re.findall(r"(\d+)étoiles", title) - assert not counts or all(int(v) == n for v in counts), title - - -def test_reconstruction_cardinality_cannot_reassign_spectral_classes(visualizer_case): - c = visualizer_case - # Original row 4 was removed upstream; truncating assigns row 5 to G, - # although its actual class is F. Twelve retained F rows satisfy the >=10 - # display policy. Missing IDs cannot be reconstructed by this API. - types = np.array(["F"] * 4 + ["G"] * 4 + ["F"] * 9) - X = np.arange(17.0)[:, None] * 10 - keep = np.delete(np.arange(17), 4) - expected_F = X[keep][types[keep] == "F"].mean() - result = call_or_domain_refusal( - lambda: c.viz.plot_ae_recon_by_spectral_type( - X[keep], X[keep] + 2, types, ["feature_Hα_eq_width"] - ), - ["align", "length", "taille", "cardinal", "observ", "row"], - ) - if result is not None and result[0] is not None: - _, axes = result - assert_allclose( - axes[0].patches[0].get_height(), - expected_F, - err_msg="Truncation is not observation identity", - ) - - -@pytest.mark.parametrize("name", ["plot_hdbscan_clusters", "plot_hdbscan_hr"]) -def test_cluster_colorbar_matches_actual_cluster_rgb( - visualizer_case, hdbscan_module, name -): - c = visualizer_case - hdb = hdbscan_module.HDBSCANAnalyzer() - hdb.labels_ = np.array([2, -1, 7, 2, 7, 2]) - hdb._compute_stats() - hdb._build_palette() - fig, axes = getattr(c.viz, name)( - c.Z, hdb, c.y if name.endswith("clusters") else c.meta - ) - colorbars = [ - a._colorbar - for a in fig.axes - if getattr(a, "_colorbar", None) is not None - and a._colorbar.ax.get_ylabel() == "Cluster ID" - ] - if not colorbars: - for cid, sc in zip([2, 7], axes[0].collections[1:]): - annotation = next( - (t for t in axes[0].texts if t.get_text() == f"C{cid}"), None - ) - assert annotation is not None, "Cluster identity must remain interpretable" - assert_allclose( - annotation.get_bbox_patch().get_facecolor()[:3], - sc.get_facecolors()[0, :3], - ) - return - cb = colorbars[0] - for collection, cid in zip(axes[0].collections[1:], [2, 7]): - assert_allclose( - cb.mappable.to_rgba(cid)[:3], - collection.get_facecolors()[0, :3], - err_msg=f"Colorbar does not encode C{cid}", - ) - - -def test_actual_unit_confidence_is_not_claimed_unavailable(visualizer_case): - c = visualizer_case - _, axes = c.viz.plot_xgboost_umap( - c.Z, np.array(["F"] * 6), np.ones(6), np.array([0] * 6), {0: "blue"} - ) - # Supplied ones are compatible with genuine probability=1; no availability - # flag enters this API. Numeric values alone cannot establish absence. - assert not any("non disponible" in t.get_text() for t in axes[1].texts) - - -@pytest.mark.parametrize("name", ["plot_ae_embedding", "plot_latent_zoomed"]) -def test_no_physical_columns_still_supports_classes_or_explicit_refusal( - visualizer_case, name -): - c = visualizer_case - meta = c.meta[["obsid"]] - - def call(): - if name == "plot_ae_embedding": - return c.viz.plot_ae_embedding(c.Z, meta, c.y) - return c.viz.plot_latent_zoomed(c.Z, c.y, meta) - - result = call_or_domain_refusal( - call, ["physical", "param", "gaia", "column", "colonn"] - ) - if result is not None and result[0] is not None: - _, axes = result - ax = np.atleast_1d(axes)[0] - assert sum(len(sc.get_offsets()) for sc in ax.collections) == 6 - - -@pytest.mark.parametrize("n_show", [1, 0, 4]) -def test_cluster_profiles_unavailable_slots_not_presented_as_data( - visualizer_case, n_show -): - c = visualizer_case - means = pd.DataFrame( - [[1.0, 2, 3, 4, 5], [-1, -2, -3, -4, -5]], index=[2, 7], columns=list("abcde") - ) - result = call_or_domain_refusal( - lambda: c.viz.plot_hdbscan_feature_profiles( - means, np.array([2, 7, 7]), n_show=n_show - ), - ["cluster", "n_show", "positive", "count", "nombre"], - ) - if result is not None and result[0] is not None: - _, axes = result - for ax in np.asarray(axes).ravel(): - assert ( - ax.patches or not ax.axison or not ax.get_visible() - ), "Empty slot looks like a measurement panel" - - -def test_more_reconstructions_than_rows_has_no_empty_measurement_axes(visualizer_case): - c = visualizer_case - _, axes = c.viz.plot_ae_reconstruction( - c.Z[:2], c.Z[:2] + 1, ["a", "b"], n_samples=4 - ) - for ax in axes: - assert ( - ax.lines or not ax.axison or not ax.get_visible() - ), "Unpopulated reconstruction panel" - - -def test_truncated_variance_annotation_does_not_attribute_wrong_mass(visualizer_case): - c = visualizer_case - pca = SimpleNamespace( - explained_variance_ratio=np.array([0.6, 0.25, 0.15]), - n_components_for_variance=lambda threshold: 3, - ) - _, axes = c.viz.plot_variance_explained(pca, threshold=0.95, max_pcs=2) - annotations = " ".join(t.get_text() for t in axes[1].texts) - claims = re.findall(r"(\d+) PCs\s*[^\d]*([\d.]+)%", annotations) - for count, percentage in claims: - true_mass = sum(pca.explained_variance_ratio[: int(count)]) * 100 - assert_allclose( - float(percentage), - true_mass, - atol=0.05, - err_msg="Annotated PC count and explained mass disagree", - ) - - -def test_log_histogram_keeps_small_positive_errors(visualizer_case): - c = visualizer_case - errors = np.array([1e-8, 1e-7, 1e-6, 0.01, 0.1, 1.0]) - _, axes = c.viz.plot_ae_error_distribution_logscale(errors, np.array(["STAR"] * 6)) - bars = axes[1].containers[0] - assert ( - min(p.get_x() for p in bars) <= errors.min() - ), "Positive MSEs dropped below arbitrary 1e-4 floor" - - -def test_histogram_does_not_silently_omit_fifth_class(visualizer_case): - c = visualizer_case - labels = np.array(["A", "B", "C", "D", "E", "E"]) - result = call_or_domain_refusal( - lambda: c.viz.plot_ae_error_distribution( - np.array([1.0, 2, 3, 4, 5, 9]), labels - ), - ["class", "palette", "population"], - ) - if result is None: - return - _, ax = result - represented = {label.split(" ")[0] for label in ax.get_legend_handles_labels()[1]} - assert represented == set(labels), "Palette length silently drops classes" - - -@pytest.mark.parametrize("name", ["plot_training_history", "plot_ae_vs_pca"]) -def test_default_output_directory_applies_to_direct_exports( - visualizer_case, tmp_path, name -): - c = visualizer_case - viz = c.module.DimRedVisualizer(output_dir=tmp_path, dpi=30) - if name == "plot_training_history": - result = viz.plot_training_history( - {"train_loss": [2.0, 1], "val_loss": [3.0, 2]} - ) - else: - result = viz.plot_ae_vs_pca( - pd.DataFrame( - { - "method": ["PCA", "AE"], - "n_components": [1, 2], - "mse_mean": [0.5, 0.3], - } - ) - ) - assert result[0] is not None - assert list(tmp_path.glob("*.png")), "Configured output_dir ignored" - - -def test_trustworthiness_axis_contains_computed_values(visualizer_case): - c = visualizer_case - rng = np.random.default_rng(1729) - X = rng.normal(size=(12, 2)) - bad = X[[7, 0, 9, 4, 1, 10, 2, 11, 3, 6, 5, 8]] - _, ax = c.viz.plot_trustworthiness(X, X, bad, k_values=[1, 2, 3]) - lo, hi = sorted(ax.get_ylim()) - vals = np.concatenate([line.get_ydata() for line in ax.lines[:2]]) - assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi)) - - -def test_default_eigenspectrum_line_labels_are_renderable(visualizer_case): - c = visualizer_case - pca = SimpleNamespace( - loadings=np.array([[0.1, -0.4, 0.9, -0.2]]), - explained_variance_ratio=np.array([1.0]), - ) - try: - fig, axes = c.viz.plot_eigenspectra( - pca, np.array([3800.0, 4400.0, 5500.0, 6800.0]), n_components=1 - ) - fig.canvas.draw() - except Exception as exc: - assert False, f"Valid default eigen-spectrum labels must render: {exc}" - assert_array_equal(axes[0].lines[0].get_ydata(), pca.loadings[0]) From 0c06cfd497579c5f99fd957c97ca28a052494bd4 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Fri, 13 Nov 2026 11:45:16 -0500 Subject: [PATCH 4/8] test(dimred): strengthen M2.8 review oracles and discrimination --- audit/check_m28_evidence.py | 45 +- audit/check_m28_review.py | 525 ++++++++++++++++++++++ audit/check_m28_validation.py | 6 +- tests/conftest.py | 9 + tests/proofs_dimred_visualizer.py | 460 +++++++++++++++++++ tests/test_dimred_visualizer.py | 94 +++- tests/test_visualizer_review_contracts.py | 71 +++ tests/visualizer_review_contracts.py | 259 +++++++++++ 8 files changed, 1452 insertions(+), 17 deletions(-) create mode 100644 audit/check_m28_review.py create mode 100644 tests/proofs_dimred_visualizer.py create mode 100644 tests/test_visualizer_review_contracts.py create mode 100644 tests/visualizer_review_contracts.py diff --git a/audit/check_m28_evidence.py b/audit/check_m28_evidence.py index 0f9ccf4..74e2036 100644 --- a/audit/check_m28_evidence.py +++ b/audit/check_m28_evidence.py @@ -436,7 +436,24 @@ def main(): tree / "src/dimred", ignore=shutil.ignore_patterns("__pycache__"), ) - for p in [GREEN, "tests/conftest.py", "pyproject.toml"]: + extras = [ + "tests/visualizer_review_contracts.py", + "tests/test_visualizer_review_contracts.py", + ] + archived_paths = ( + subprocess.check_output( + ["git", "ls-tree", "-r", "--name-only", args.proofs_ref, "--", "tests"], + cwd=ROOT, + text=True, + ).splitlines() + if args.proofs_ref + else [] + ) + for p in [GREEN, "tests/conftest.py", "pyproject.toml"] + [ + p + for p in extras + if (ROOT / p).exists() and (not args.proofs_ref or p in archived_paths) + ]: shutil.copy2(ROOT / p, tree / p) if args.proofs_ref: archived_source = ( @@ -455,23 +472,43 @@ def main(): ["git", "show", f"{args.proofs_ref}:{p}"], cwd=ROOT ) (tree / p).write_bytes(content) + for p in extras: + if p in archived_paths: + (tree / p).write_bytes( + subprocess.check_output( + ["git", "show", f"{args.proofs_ref}:{p}"], cwd=ROOT + ) + ) payload["proofs_ref"] = args.proofs_ref elif (ROOT / PROOF).exists(): shutil.copy2(ROOT / PROOF, tree / PROOF) (tree / "m28_trace.py").write_text(PLUGIN, encoding="utf-8") payload["executed_files_lf_sha256"] = { p: digest(tree / p) - for p in [SOURCE, GREEN, "tests/conftest.py", PROOF] + for p in [SOURCE, GREEN, "tests/conftest.py", PROOF] + extras if (tree / p).exists() } - tests = [GREEN] if args.mode in ["mutations", "reverse"] else [PROOF] + green_tests = [GREEN] + [ + p + for p in extras + if p.endswith("test_visualizer_review_contracts.py") and (tree / p).exists() + ] + tests = green_tests if args.mode in ["mutations", "reverse"] else [PROOF] baseline = run(tree, tests, "", reverse=args.mode == "reverse") payload["baseline"] = baseline for name, method, old, new, selection in plans: - tests = [GREEN, PROOF] if args.mode == "proofs" else [GREEN] + tests = green_tests + [PROOF] if args.mode == "proofs" else green_tests (tree / SOURCE).write_text(source, encoding="utf-8") original = run(tree, tests, selection) changed, sites = edit(source, method, old, new) + if name == "C13_integrated_kde_mass" and (tree / extras[0]).exists(): + changed, domain_sites = edit( + changed, + method, + "margin = (p99 - p1) * 0.15", + "margin = (p99 - p1) * 0.8", + ) + sites |= domain_sites (tree / SOURCE).write_text(changed, encoding="utf-8") actual = run(tree, tests, selection) same = sorted(c["id"] for c in original["cases"]) == sorted( diff --git a/audit/check_m28_review.py b/audit/check_m28_review.py new file mode 100644 index 0000000..0528511 --- /dev/null +++ b/audit/check_m28_review.py @@ -0,0 +1,525 @@ +"""Reconstruct Claude review candidates without changing production in the worktree. + +Each plan has a selected original-source baseline, exact patches and executed +statement anchors. Wrong candidates count as KILLED only on assertion failures. +Admissible controls and joint satisfiability are reported separately. +""" + +import argparse +import ast +import difflib +import hashlib +import importlib.util +import json +from pathlib import Path +import shutil +import subprocess +import sys +import tempfile + +ROOT = Path(__file__).resolve().parents[1] +SOURCE = "src/dimred/dimred_visualizer.py" +GREEN = "tests/test_dimred_visualizer.py" +PROOF = "tests/proofs_dimred_visualizer.py" +EXTRAS = [ + "tests/conftest.py", + "tests/visualizer_review_contracts.py", + "tests/test_visualizer_review_contracts.py", +] +spec = importlib.util.spec_from_file_location( + "m28_original_runner", ROOT / "audit/check_m28_evidence.py" +) +runner = importlib.util.module_from_spec(spec) +spec.loader.exec_module(runner) + + +def replace(source, method, old, new): + return runner.edit(source, method, old, new)[0] + + +def kde_levels(source, new): + start = source.index(" zz_flat = ZZ.ravel()") + stop = source.index(" params = [", start) + source = replace(source, "plot_latent_kde", source[start:stop], new) + # Probability solvers are independent of this display-domain completion. + # Original percentile bounds cut the nominal 99% contour into open arcs. + return replace( + source, + "plot_latent_kde", + "margin = (p99 - p1) * 0.15", + "margin = (p99 - p1) * 0.8", + ) + + +C13 = """ center = Z_stars.mean(axis=0) + scale = Z_stars.std(axis=0) + qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401) + qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401) + a, b = np.meshgrid(qx, qy) + density = kde(np.vstack([a.ravel(), b.ravel()])) + ordered = np.sort(density)[::-1] + mass = np.cumsum(ordered)/ordered.sum() + levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]]) + +""" +K4 = """ draws = kde.resample(200000, seed=np.random.default_rng(7)) + density = kde.evaluate(draws) + levels = sorted(float(np.quantile(density,1-p)) for p in [.99,.95,.68]) + +""" +K5 = """ sigma = np.sqrt(np.diag(kde.covariance)) + qx = np.linspace(kde.dataset[0].min()-4*sigma[0],kde.dataset[0].max()+4*sigma[0],500) + qy = np.linspace(kde.dataset[1].min()-4*sigma[1],kde.dataset[1].max()+4*sigma[1],500) + a,b = np.meshgrid(qx,qy) + density = kde(np.vstack([a.ravel(),b.ravel()])) + ordered = np.sort(density)[::-1] + mass = np.cumsum(ordered)/ordered.sum() + levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]]) + +""" + + +def scalar_patch(method, old, new): + return lambda source: replace(source, method, old, new) + + +def categorical(source, legend): + for method, variable in [ + ("plot_hdbscan_clusters", "sm"), + ("plot_hdbscan_hr", "sm2"), + ]: + if legend: + node = next( + n + for n in ast.walk(ast.parse(source)) + if isinstance(n, ast.FunctionDef) and n.name == method + ) + statement = next( + n + for n in node.body + if isinstance(n, ast.Expr) and "plt.colorbar(" in ast.unparse(n) + ) + old = "\n".join( + source.splitlines()[statement.lineno - 1 : statement.end_lineno] + ) + new = ' ax.legend(handles=[mpatches.Patch(color=color_map[c],label=f"C{c}") for c in cluster_ids])\n for annotation in list(ax.texts):\n annotation.remove()' + source = replace(source, method, old, new) + else: + source = replace( + source, + method, + "cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)", + "cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))", + ) + return source + + +def exports(source): + old = """ if save_path is not None: + fig.savefig(save_path, bbox_inches="tight", dpi=self.dpi) + logger.info("Figure sauvegardée : %s", save_path)""" + for method in ["plot_training_history", "plot_ae_vs_pca"]: + source = replace( + source, method, old, f' self._save(fig,save_path,"{method}")' + ) + return source + + +def joint(source): + # Original C01-C14 controls except C13 (constructed below). + for _, method, old, new, _ in runner.CONTROLS: + source = replace(source, method, old, new) + source = kde_levels(source, C13) + source = categorical(source, False) + source = replace( + source, + "plot_xgboost_umap", + "confidence is not None and not np.all(confidence == 1.0)", + "confidence is not None", + ) + source = replace( + source, + "plot_hdbscan_feature_profiles", + "axes_flat[n_show:]", + "axes_flat[len(top_cids):]", + ) + source = replace( + source, + "plot_variance_explained", + 'f"{n_thresh} PCs\\n→ {cumvar[idx]*100:.1f}%"', + 'f"{n_thresh} PCs\\n→ {pca_analyzer.explained_variance_ratio[:n_thresh].sum()*100:.1f}%"', + ) + source = replace( + source, + "plot_ae_error_distribution", + "zip(classes, palette)", + "zip(classes, palette*((len(classes)+len(palette)-1)//len(palette)))", + ) + source = exports(source) + # R10 uses the human-selected visible-or-exactly-disclosed contract. + source = replace( + source, + "plot_ae_error_distribution_logscale", + " ax.hist(\n vals,", + ' missing = int(((valsbins[-1])).sum())\n if missing:\n ax.text(.03,.05,f"{cls}: excluded {missing} of {len(vals)} outside support {bins[0]:.6f} to {bins[-1]:.6f}",transform=ax.transAxes)\n ax.hist(\n vals,', + ) + return source + + +def plans(): + p = [] + + def add(name, selection, transform, admissible=False): + p.append((name, selection, transform, admissible)) + + add("C13", "kde_labeled_regions", lambda s: kde_levels(s, C13), True) + add("K4", "kde_labeled_regions", lambda s: kde_levels(s, K4), True) + add("K5", "kde_labeled_regions", lambda s: kde_levels(s, K5), True) + add( + "K1B", + "kde_labeled_regions", + lambda s: kde_levels( + s, + " peak=float(ZZ.max())\n levels=sorted((1-p)*peak for p in [.99,.95,.68])\n\n", + ), + ) + for name, old, new in [ + ("K6", '["99%", "95%", "68%"]', '["68%", "95%", "99%"]'), + ( + "K7", + 'gaussian_kde(Z_stars[idx].T, bw_method="scott")', + 'gaussian_kde(Z_ae.T, bw_method="scott")', + ), + ( + "K8", + " ZZ,\n levels=levels,", + " ZZ.T,\n levels=levels,", + ), + ]: + add( + name, + "kde_labeled_regions", + lambda s, old=old, new=new: replace( + kde_levels(s, C13), "plot_latent_kde", old, new + ), + ) + add( + "K9", + "kde_labeled_regions", + lambda s: replace( + kde_levels(s, C13), + "plot_latent_kde", + " ZZ,\n levels=levels,", + " np.ma.masked_where(XX > 3, ZZ),\n levels=levels,", + ), + ) + add("AD05", "cluster_colorbar", lambda s: categorical(s, True), True) + add("AC05", "cluster_colorbar", lambda s: categorical(s, False), True) + add( + "FD02", + "hr_region_vertices", + scalar_patch( + "plot_hr_teff_regions", + "ax.set_ylim(G_HI + G_PAD * 5, G_LO - G_PAD * 5)", + '_ys = [v[1] for r in REGIONS for v in r["poly"]]\n ax.set_ylim(max(G_HI+G_PAD*5,max(_ys)),min(G_LO-G_PAD*5,min(_ys)))', + ), + ) + add( + "FD09", + "more_reconstructions", + scalar_patch( + "plot_ae_reconstruction", + "for i, (ax, si) in enumerate(zip(axes, idx)):", + "for unused in list(axes)[len(idx):]:\n unused.plot([],[])\n for i, (ax, si) in enumerate(zip(axes, idx)):", + ), + ) + + def fd11(s): + s = replace( + s, + "plot_ae_error_distribution_logscale", + "max(vals.min(), 1e-4)", + "vals.min()", + ) + return replace( + s, + "plot_ae_error_distribution_logscale", + " ax.hist(\n vals,", + ' ax.hist(\n vals[vals>=1e-4] if xscale=="log" else vals,', + ) + + add("FD11", "log_histogram_keeps", fd11) + add( + "FD12", + "fifth_class", + scalar_patch( + "plot_ae_error_distribution", + ' ax.set_xlabel("MSE de reconstruction")', + ' for cls in classes[len(palette):]:\n ax.plot([],[],label=f"{cls} (n={(y==cls).sum()})")\n ax.set_xlabel("MSE de reconstruction")', + ), + ) + add( + "FD13", + "default_output_directory and plot_training_history", + scalar_patch( + "plot_training_history", + " if save_path is not None:", + ' if self.output_dir is not None:\n plt.figure().savefig(self.output_dir/"empty.png")\n if save_path is not None:', + ), + ) + add( + "FD03", + "hr_population_title", + scalar_patch("plot_hr_teff_regions", "43 019 étoiles", "N = 43 019"), + ) + add( + "FD10", + "truncated_variance_annotation", + scalar_patch( + "plot_variance_explained", + 'f"{n_thresh} PCs\\n→ {cumvar[idx]*100:.1f}%"', + 'f"→ {cumvar[idx]*100:.1f}% avec {n_thresh} PCs"', + ), + ) + for name, method, old, new, selection in [ + ( + "N01", + "plot_xgboost_umap", + 'label=f"{cls} (n={mask.sum()})"', + 'label=f"{classes_pred[(classes_pred.index(cls)+1)%len(classes_pred)]} (n={mask.sum()})"', + "xgboost_classes_confidence", + ), + ( + "N02", + "plot_hdbscan_clusters", + 'label=f"{cls} (n={mask.sum()})"', + 'label=f"{np.unique(y)[(list(np.unique(y)).index(cls)+1)%len(np.unique(y))]} (n={mask.sum()})"', + "real_analyzer_state", + ), + ( + "N04", + "plot_synthesis_grid", + 'f"{method_name}\\n{ylabel}"', + 'f"{METHODS[-1-row][0]}\\n{ylabel}"', + "synthesis_preserves", + ), + ( + "N10", + "plot_trustworthiness", + "Zt_sub = Z_tsne[idx]", + "Zt_sub = Z_tsne[np.roll(idx,1)]", + "real_sklearn_trustworthiness", + ), + ]: + add(name, selection, scalar_patch(method, old, new)) + + def n05(s): + s = replace(s, "plot_latent_interpolation", "label=label_a", "label=(label_b)") + return replace(s, "plot_latent_interpolation", "label=label_b", "label=label_a") + + add("N05", "interpolation_actual", n05) + + def n06(s): + s = replace(s, "plot_loadings_family_bar", 'label="PC1"', 'label=("PC2")') + return replace(s, "plot_loadings_family_bar", 'label="PC2"', 'label="PC1"') + + add("N06", "family_weights_bar", n06) + add( + "N03", + "real_export_readable", + scalar_patch( + "_save", + 'fig.savefig(path, bbox_inches="tight", dpi=self.dpi)', + 'import pickle\n clone=pickle.loads(pickle.dumps(fig))\n for axis in clone.axes:\n for collection in list(axis.collections):\n collection.remove()\n clone.savefig(path,bbox_inches="tight",dpi=self.dpi)\n plt.close(clone)', + ), + ) + add( + "A_TRUST", + "real_sklearn_trustworthiness", + scalar_patch( + "plot_trustworthiness", + "idx = rng.choice(len(X_ref), size=n, replace=False)", + "idx = np.sort(rng.permutation(len(X_ref))[:n])", + ), + True, + ) + add( + "AD14", + "trustworthiness_axis_contains", + scalar_patch( + "plot_trustworthiness", + "ax.set_ylim(0.75, 1.01)", + 'ax.set_ylim(0.75,1.01)\n ax.text(.1,.1,f"T(k) < 0.75 hors champ : min = {min(trust_t):.3f}",transform=ax.transAxes)', + ), + True, + ) + add("A_EXPORT", "default_output_directory or real_export_readable", exports, True) + add( + "A_METHODS", + "synthesis_preserves", + scalar_patch("plot_synthesis_grid", '("Autoencodeur", Z_ae,', '("AE", Z_ae,'), + True, + ) + add( + "A_HIST", + "linear_histogram_truncation", + scalar_patch( + "plot_ae_error_distribution_logscale", + "star_p99 * 1.5", + "float(np.max(mse_per_sample))", + ), + True, + ) + add("AD_HIST", "linear_histogram_truncation", joint, True) + add("JOINT", "", joint, True) + return p + + +def changed_anchors(before, after): + statements = [n for n in ast.walk(ast.parse(after)) if isinstance(n, ast.stmt)] + groups = [] + for op, a, b, c, d in difflib.SequenceMatcher( + None, before.splitlines(), after.splitlines() + ).get_opcodes(): + if op == "equal": + continue + anchors = set() + for line in range(c + 1, max(c + 2, d + 1)): + candidates = [n for n in statements if n.lineno <= line <= n.end_lineno] + if candidates: + anchors.add( + min(candidates, key=lambda n: n.end_lineno - n.lineno).lineno + ) + groups.append(sorted(anchors)) + return groups + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--only", nargs="+") + parser.add_argument("--proofs-ref") + parser.add_argument("--output", default="test-results/m28-review.json") + args = parser.parse_args() + source = (ROOT / SOURCE).read_text(encoding="utf-8") + protected = { + p: runner.digest(ROOT / p) + for p in [SOURCE, GREEN, PROOF, *EXTRAS] + if (ROOT / p).exists() + } + if args.proofs_ref: + archived_source = ( + subprocess.check_output( + ["git", "show", f"{args.proofs_ref}:{SOURCE}"], cwd=ROOT + ) + .decode("utf-8") + .replace("\r\n", "\n") + ) + if archived_source != source: + raise RuntimeError("Production differs from the chosen proof archive") + ledger = { + "active_head": subprocess.check_output( + ["git", "rev-parse", "HEAD"], cwd=ROOT, text=True + ).strip(), + "python": sys.version, + "working_hashes": protected, + "runs": [], + } + with tempfile.TemporaryDirectory(prefix="m28-review-synthetic-") as directory: + tree = Path(directory) + shutil.copytree( + ROOT / "src/dimred", + tree / "src/dimred", + ignore=shutil.ignore_patterns("__pycache__"), + ) + (tree / "tests").mkdir() + for p in [GREEN, PROOF, *EXTRAS, "pyproject.toml"]: + if args.proofs_ref and p.startswith("tests/"): + data = subprocess.check_output( + ["git", "show", f"{args.proofs_ref}:{p}"], cwd=ROOT + ) + (tree / p).write_bytes(data) + else: + shutil.copy2(ROOT / p, tree / p) + ledger["executed_hashes"] = { + p: runner.digest(tree / p) for p in [SOURCE, GREEN, PROOF, *EXTRAS] + } + (tree / "m28_trace.py").write_text(runner.PLUGIN, encoding="utf-8") + tests = [GREEN, EXTRAS[-1], PROOF] + for name, selection, transform, admissible in plans(): + if args.only and name not in args.only: + continue + (tree / SOURCE).write_text(source, encoding="utf-8") + baseline_source = source if admissible else joint(source) + (tree / SOURCE).write_text(baseline_source, encoding="utf-8") + baseline = runner.run(tree, tests, selection) + candidate = transform(source) + ast.parse(candidate) + anchors = changed_anchors(source, candidate) + (tree / SOURCE).write_text(candidate, encoding="utf-8") + actual = runner.run(tree, tests, selection) + same = sorted(c["id"] for c in baseline["cases"]) == sorted( + c["id"] for c in actual["cases"] + ) + reached = all( + set(a).intersection(actual["executed_lines"]) for a in anchors + ) + failures = [c for c in actual["cases"] if c["status"] == "FAILURE"] + assertions = bool(failures) and all( + "AssertionError" in c["message"] or "E assert" in c["message"] + for c in failures + ) + clean = bool(actual["cases"]) and all( + c["status"] in ["PASS", "FAILURE"] for c in actual["cases"] + ) + result = "INCONCLUSIVE" + if ( + same + and reached + and clean + and (admissible or baseline["returncode"] == 0) + ): + result = ( + ("PASS" if admissible else "SURVIVED") + if actual["returncode"] == 0 + else "KILLED" if assertions else "NON_ASSERTION_FAILURE" + ) + ledger["runs"].append( + dict( + name=name, + selection=selection, + admissible=admissible, + classification=result, + reached_all_hunks=reached, + same_collection=same, + changed_anchors=anchors, + patch="".join( + difflib.unified_diff( + source.splitlines(True), candidate.splitlines(True) + ) + ), + candidate_sha256=hashlib.sha256(candidate.encode()).hexdigest(), + baseline_kind=( + "original production" + if admissible + else "admissible joint control" + ), + baseline_source_sha256=hashlib.sha256( + baseline_source.encode() + ).hexdigest(), + baseline=baseline, + candidate=actual, + ) + ) + output = ROOT / args.output + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text( + json.dumps(ledger, indent=2, ensure_ascii=True) + "\n", encoding="utf-8" + ) + print(name, result, flush=True) + assert protected == { + p: runner.digest(ROOT / p) for p in protected + }, "Protected worktree inputs changed" + + +if __name__ == "__main__": + main() diff --git a/audit/check_m28_validation.py b/audit/check_m28_validation.py index 89cc62b..a3ad71a 100644 --- a/audit/check_m28_validation.py +++ b/audit/check_m28_validation.py @@ -22,11 +22,14 @@ def main(): "src/dimred/dimred_visualizer.py", "tests/conftest.py", "tests/test_dimred_visualizer.py", + "tests/visualizer_review_contracts.py", + "tests/test_visualizer_review_contracts.py", ] helpers = [ "audit/check_m28_evidence.py", "audit/check_m28_boundaries.py", "audit/check_m28_validation.py", + "audit/check_m28_review.py", ] result = { "active_head": subprocess.check_output( @@ -52,7 +55,7 @@ def main(): p: hashlib.sha256( (ROOT / p).read_text(encoding="utf-8").replace("\r\n", "\n").encode() ).hexdigest() - for p in files + for p in files + helpers }, "commands": [], } @@ -65,6 +68,7 @@ def main(): "pytest", "-q", "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", "-W", "error", "--junitxml=test-results/m28-targeted-validation.xml", diff --git a/tests/conftest.py b/tests/conftest.py index 4a05d88..0d44271 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -86,6 +86,15 @@ def reporter_module(): return module +@pytest.fixture +def visualizer_contracts(): + path = Path(__file__).resolve().parent / "visualizer_review_contracts.py" + spec = importlib.util.spec_from_file_location("m28_review_contracts", path) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return module + + @pytest.fixture def reporter_contracts(): path = Path(__file__).resolve().parent / "reporter_review_contracts.py" diff --git a/tests/proofs_dimred_visualizer.py b/tests/proofs_dimred_visualizer.py new file mode 100644 index 0000000..cba8f04 --- /dev/null +++ b/tests/proofs_dimred_visualizer.py @@ -0,0 +1,460 @@ +"""Explicit M2.8 counterexamples; archived and removed from the green head. + +No xfail and no production edits. Refusal, masking and unavailable outputs are +alternatives on invalid data; valid positive cases are in the green suite. +""" + +import re +from types import SimpleNamespace + +import numpy as np +from numpy.testing import assert_allclose, assert_array_equal +import pandas as pd +import pytest + + +def call_or_domain_refusal(call, domain): + """Permit relevant explicit refusal, never accept incidental backend errors.""" + try: + return call() + except (ValueError, RuntimeError) as exc: + message = str(exc).lower() + assert any(word in message for word in domain), message + assert not any( + word in message + for word in [ + "concatenate", + "percentile", + "0 columns", + "singular data covariance", + ] + ), message + return None + except Exception as exc: + pytest.fail( + f"Incidental {type(exc).__name__} instead of explicit domain handling: {exc}" + ) + + +def gaussian_population(n=250): + rng = np.random.default_rng(1729) + Z = rng.normal(size=(n, 2)) * [2.0, 3.0] + meta = pd.DataFrame({"teff_gspphot": np.arange(n, dtype=float) + 3500}) + return Z, np.array(["STAR"] * n), meta + + +@pytest.mark.parametrize( + "case", ["gaussian", "analytic_normal", "mixture31", "mixture7", "mixture83"] +) +def test_kde_labeled_regions_enclose_probability_mass( + visualizer_case, visualizer_contracts, monkeypatch, case +): + """Each displayed label belongs to an actual STAR iso-density geometry. + + Mass means fitted-estimator probability, not empirical fraction of stars. + The broad 0.05-grid mixture quadrature captures >.9999 total mass; .006 + allows cell-boundary discretization, independently checked by C13/K4/K5. + Geometry rtol=.05 covers interpolation on the production 200x200 grid. + """ + import scipy.stats + from matplotlib.axes import Axes + from matplotlib.path import Path + + c = visualizer_case + if case.startswith("mixture"): + rng = np.random.default_rng(int(case.removeprefix("mixture"))) + a = rng.normal(size=(210, 2)) * [1.0, 2.0] + b = rng.normal(size=(90, 2)) * [1.4, 0.7] + [6.0, 3.0] + nonstar = rng.normal(size=(40, 2)) * 0.3 + [6.0, -4.0] + Z = np.vstack([a, b, nonstar]) + y = np.array(["STAR"] * 300 + ["QSO"] * 40) + meta = pd.DataFrame({"teff_gspphot": np.linspace(3500, 9000, len(Z))}) + gx, gy = np.meshgrid(np.linspace(-12, 18, 601), np.linspace(-14, 14, 561)) + else: + Z, y, meta = gaussian_population() + g = np.linspace(-8, 8, 401) + gx, gy = np.meshgrid(2 * g, 3 * g) + stars = {tuple(row) for row in Z[y == "STAR"]} + fitted, labelled = [], [] + real = scipy.stats.gaussian_kde + original_clabel = Axes.clabel + + def fit(data, **kwargs): + estimator = ( + visualizer_contracts.AnalyticGaussian(data, **kwargs) + if case == "analytic_normal" + else real(data, **kwargs) + ) + fitted.append(estimator) + return estimator + + def clabel(ax, cs, *args, **kwargs): + geometry = [[segment.copy() for segment in level] for level in cs.allsegs] + labelled.append( + (ax, cs, kwargs.get("fmt", args[0] if args else None), geometry) + ) + return original_clabel(ax, cs, *args, **kwargs) + + monkeypatch.setattr(scipy.stats, "gaussian_kde", fit) + monkeypatch.setattr(Axes, "clabel", clabel) + fig, axes = c.viz.plot_latent_kde(Z, y, meta) + assert ( + fitted and labelled and fig is not None + ), "Valid KDE needs estimator and informative labelled contours" + estimator = fitted[0] + assert estimator.dataset.shape[1] >= 3 + assert all( + tuple(point) in stars for point in estimator.dataset.T + ), "KDE fitted on non-STAR observations" + broad = estimator(np.vstack([gx.ravel(), gy.ravel()])) + cell = (gx[0, 1] - gx[0, 0]) * (gy[1, 0] - gy[0, 0]) + assert_allclose(broad.sum() * cell, 1, atol=1e-4) + points = np.column_stack([gx.ravel(), gy.ravel()]) + for ax, cs, fmt, geometry in labelled: + assert cs in ax.collections, "Must test the actual plotted contour artist" + claims = [] + for level, segments in zip(cs.levels, geometry): + label = fmt[level] if isinstance(fmt, dict) else fmt(level) + match = re.fullmatch(r"\s*(\d+(?:\.\d+)?)\s*%\s*", label) + assert match, f"Uninterpretable contour probability label: {label}" + claimed = float(match.group(1)) / 100 + claims.append(claimed) + mass = float(broad[broad >= level].sum() * cell) + if case == "analytic_normal": + assert_allclose(mass, max(0.0, 1 - 12 * np.pi * level), atol=0.006) + assert_allclose( + mass, + claimed, + atol=0.006, + rtol=0, + err_msg=f"Actual label {label} disagrees with enclosed KDE mass", + ) + nonempty = [segment for segment in segments if len(segment)] + assert nonempty, f"No contour geometry for label {label}" + enclosed = np.zeros(len(points), dtype=bool) + for segment in nonempty: + # Even/odd containment retains disjoint modes and excludes holes. + enclosed ^= Path(segment).contains_points(points) + polygon_mass = float(broad[enclosed].sum() * cell) + assert_allclose( + polygon_mass, + claimed, + atol=0.006, + rtol=0, + err_msg="Actual contour polygons do not enclose their labelled mass", + ) + vertices = np.vstack(nonempty) + assert_allclose( + estimator(vertices.T), + level, + rtol=0.05, + atol=1e-10, + err_msg="Contour vertices are not on the fitted STAR iso-density", + ) + assert sorted(claims) == [0.68, 0.95, 0.99] + + +def test_hr_region_vertices_have_gravity_units_and_stay_in_domain(visualizer_case): + c = visualizer_case + _, ax = c.viz.plot_hr_teff_regions(c.meta) + # Independent input-domain envelope: never take admissible gravity units + # from limits chosen by the implementation under test. + gravity = c.meta.logg_gspphot.to_numpy() + temperature = c.meta.teff_gspphot.to_numpy() + low, high = gravity.min() - 0.1 * np.ptp(gravity), gravity.max() + 0.1 * np.ptp( + gravity + ) + assert ax.patches, "Valid HR regional figure must contain informative regions" + vertices = np.vstack([p.get_xy() for p in ax.patches]) + assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices + tlo, thi = temperature.min() - 0.1 * np.ptp( + temperature + ), temperature.max() + 0.1 * np.ptp(temperature) + assert np.all((vertices[:, 0] >= tlo) & (vertices[:, 0] <= thi)) + + +@pytest.mark.parametrize("n", [6, 9]) +def test_hr_population_title_is_counted_or_omitted(visualizer_case, n): + c = visualizer_case + meta = pd.concat([c.meta, c.meta.iloc[:3]], ignore_index=True).iloc[:n] + _, ax = c.viz.plot_hr_teff_regions(meta) + title = re.sub(r"(?:LAMOST|Gaia)\s*DR\s*\d+", "", ax.get_title(), flags=re.I) + compact = re.sub(r"(?<=\d)[ \u202f\u00a0](?=\d{3}(?:\D|$))", "", title) + counts = re.findall(r"\b\d+\b", compact) + assert not counts or all(int(v) == n for v in counts), title + + +def test_reconstruction_cardinality_cannot_reassign_spectral_classes(visualizer_case): + c = visualizer_case + # Original G row 4 was removed upstream; truncating assigns original F row 8 + # to G. Twelve retained F rows satisfy the >=10 + # display policy. Missing IDs cannot be reconstructed by this API. + types = np.array(["F"] * 4 + ["G"] * 4 + ["F"] * 9) + X = np.arange(17.0)[:, None] * 10 + keep = np.delete(np.arange(17), 4) + expected_F = X[keep][types[keep] == "F"].mean() + result = call_or_domain_refusal( + lambda: c.viz.plot_ae_recon_by_spectral_type( + X[keep], X[keep] + 2, types, ["feature_Hα_eq_width"] + ), + ["align", "length", "taille", "cardinal", "observ", "row"], + ) + if result is not None and result[0] is not None: + _, axes = result + assert_allclose( + axes[0].patches[0].get_height(), + expected_F, + err_msg="Truncation is not observation identity", + ) + + +@pytest.mark.parametrize("name", ["plot_hdbscan_clusters", "plot_hdbscan_hr"]) +def test_cluster_colorbar_matches_actual_cluster_rgb( + visualizer_case, hdbscan_module, name, visualizer_contracts +): + c = visualizer_case + hdb = hdbscan_module.HDBSCANAnalyzer() + hdb.labels_ = np.array([2, -1, 7, 2, 7, 2]) + hdb._compute_stats() + hdb._build_palette() + fig, axes = getattr(c.viz, name)( + c.Z, hdb, c.y if name.endswith("clusters") else c.meta + ) + coordinates = ( + c.Z + if name.endswith("clusters") + else c.meta[["teff_gspphot", "logg_gspphot"]].to_numpy() + ) + visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates) + + +def test_actual_unit_confidence_is_not_claimed_unavailable(visualizer_case): + c = visualizer_case + _, axes = c.viz.plot_xgboost_umap( + c.Z, np.array(["F"] * 6), np.ones(6), np.array([0] * 6), {0: "blue"} + ) + # Supplied ones are compatible with genuine probability=1; no availability + # flag enters this API. Numeric values alone cannot establish absence. + assert not any("non disponible" in t.get_text() for t in axes[1].texts) + + +@pytest.mark.parametrize("name", ["plot_ae_embedding", "plot_latent_zoomed"]) +def test_no_physical_columns_still_supports_classes_or_explicit_refusal( + visualizer_case, name +): + c = visualizer_case + meta = c.meta[["obsid"]] + + def call(): + if name == "plot_ae_embedding": + return c.viz.plot_ae_embedding(c.Z, meta, c.y) + return c.viz.plot_latent_zoomed(c.Z, c.y, meta) + + result = call_or_domain_refusal( + call, ["physical", "param", "gaia", "column", "colonn"] + ) + if result is not None and result[0] is not None: + _, axes = result + ax = np.atleast_1d(axes)[0] + assert sum(len(sc.get_offsets()) for sc in ax.collections) == 6 + + +@pytest.mark.parametrize("n_show", [1, 0, 4]) +def test_cluster_profiles_unavailable_slots_not_presented_as_data( + visualizer_case, n_show +): + c = visualizer_case + means = pd.DataFrame( + [[1.0, 2, 3, 4, 5], [-1, -2, -3, -4, -5]], index=[2, 7], columns=list("abcde") + ) + result = call_or_domain_refusal( + lambda: c.viz.plot_hdbscan_feature_profiles( + means, np.array([2, 7, 7]), n_show=n_show + ), + ["cluster", "n_show", "positive", "count", "nombre"], + ) + if result is not None and result[0] is not None: + _, axes = result + for ax in np.asarray(axes).ravel(): + assert ( + ax.patches or not ax.axison or not ax.get_visible() + ), "Empty slot looks like a measurement panel" + + +def test_more_reconstructions_than_rows_has_no_empty_measurement_axes(visualizer_case): + c = visualizer_case + _, axes = c.viz.plot_ae_reconstruction( + c.Z[:2], c.Z[:2] + 1, ["a", "b"], n_samples=4 + ) + for ax in axes: + if not ax.axison or not ax.get_visible(): + continue + assert ( + len(ax.lines) >= 2 + ), "Visible panel needs original and reconstructed observations" + pair = [np.asarray(line.get_ydata()) for line in ax.lines[:2]] + assert all( + len(values) == 2 for values in pair + ), "Empty or incomplete reconstruction lines" + row = next((i for i in range(2) if np.array_equal(pair[0], c.Z[i])), None) + assert row is not None, "Panel is not an actual input observation" + assert_array_equal(pair[1], c.Z[row] + 1) + populated = [ax for ax in axes if ax.axison and ax.get_visible()] + assert len(populated) == 2 + + +def test_truncated_variance_annotation_does_not_attribute_wrong_mass(visualizer_case): + c = visualizer_case + pca = SimpleNamespace( + explained_variance_ratio=np.array([0.6, 0.25, 0.15]), + n_components_for_variance=lambda threshold: 3, + ) + _, axes = c.viz.plot_variance_explained(pca, threshold=0.95, max_pcs=2) + for annotation in axes[1].texts: + label = annotation.get_text() + percentages = re.findall(r"(\d+(?:[.,]\d+)?)\s*%", label) + counts = re.findall(r"(\d+)\s*PCs?\b|\bPCs?\s*[:=]?\s*(\d+)", label, re.I) + counts = [int(a or b) for a, b in counts] + if percentages and not counts: + assert hasattr( + annotation, "xy" + ), "A variance percentage needs a PC count or an annotated coordinate" + counts = [int(annotation.xy[0])] + for count in counts: + assert 1 <= count <= 3 + for percentage in percentages: + assert_allclose( + float(percentage.replace(",", ".")), + sum(pca.explained_variance_ratio[:count]) * 100, + atol=0.05, + err_msg="Annotated PC count and variance disagree", + ) + + +def test_log_histogram_keeps_small_positive_errors( + visualizer_case, visualizer_contracts, monkeypatch +): + c = visualizer_case + errors = np.array([1e-8, 1e-7, 1e-6, 0.01, 0.1, 1.0]) + calls = visualizer_contracts.capture_histograms(monkeypatch) + _, axes = c.viz.plot_ae_error_distribution_logscale(errors, np.array(["STAR"] * 6)) + call = next(call for call in calls if call["ax"] is axes[1]) + missing, edges = visualizer_contracts.assert_histogram_population(call, errors) + assert missing == 0 or visualizer_contracts.exclusion_report( + axes[1], "STAR", missing, 6, edges + ), "Positive MSE population silently truncated" + + +def test_histogram_does_not_silently_omit_fifth_class( + visualizer_case, visualizer_contracts, monkeypatch +): + c = visualizer_case + labels = np.array(["A", "B", "C", "D", "E", "E"]) + calls = visualizer_contracts.capture_histograms(monkeypatch) + result = call_or_domain_refusal( + lambda: c.viz.plot_ae_error_distribution( + np.array([1.0, 2, 3, 4, 5, 9]), labels + ), + ["class", "palette", "population"], + ) + if result is None: + return + _, ax = result + represented = {label.split(" ")[0] for label in ax.get_legend_handles_labels()[1]} + assert represented == set(labels), "Palette length silently drops classes" + values = np.array([1.0, 2, 3, 4, 5, 9]) + assert len(calls) == 5, "Legend-only classes are not histogram populations" + for cls in set(labels): + call = next( + ( + call + for call in calls + if cls + in visualizer_contracts.tokens(call["label"]).union( + {s.upper() for s in visualizer_contracts.tokens(call["label"])} + ) + ), + None, + ) + assert call is not None, f"Missing actual histogram for class {cls}" + missing, _ = visualizer_contracts.assert_histogram_population( + call, values[labels == cls] + ) + assert missing == 0 + + +@pytest.mark.parametrize("name", ["plot_training_history", "plot_ae_vs_pca"]) +def test_default_output_directory_applies_to_direct_exports( + visualizer_case, tmp_path, name, visualizer_contracts +): + c = visualizer_case + viz = c.module.DimRedVisualizer(output_dir=tmp_path, dpi=30) + if name == "plot_training_history": + result = viz.plot_training_history( + {"train_loss": [2.0, 1], "val_loss": [3.0, 2]} + ) + else: + result = viz.plot_ae_vs_pca( + pd.DataFrame( + { + "method": ["PCA", "AE"], + "n_components": [1, 2], + "mse_mean": [0.5, 0.3], + } + ) + ) + assert result[0] is not None + assert list(tmp_path.glob("*.png")), "Configured output_dir ignored" + for path in tmp_path.glob("*.png"): + visualizer_contracts.assert_png_matches_figure(path, result[0], viz.dpi) + + +def test_trustworthiness_axis_contains_computed_values( + visualizer_case, visualizer_contracts +): + c = visualizer_case + rng = np.random.default_rng(1729) + X = rng.normal(size=(12, 2)) + bad = X[[7, 0, 9, 4, 1, 10, 2, 11, 3, 6, 5, 8]] + _, ax = c.viz.plot_trustworthiness(X, X, bad, k_values=[1, 2, 3]) + visualizer_contracts.assert_visible_or_disclosed( + ax, {"UMAP": ax.lines[0].get_ydata(), "t-SNE": ax.lines[1].get_ydata()} + ) + + +def test_default_eigenspectrum_line_labels_are_renderable(visualizer_case): + c = visualizer_case + pca = SimpleNamespace( + loadings=np.array([[0.1, -0.4, 0.9, -0.2]]), + explained_variance_ratio=np.array([1.0]), + ) + try: + fig, axes = c.viz.plot_eigenspectra( + pca, np.array([3800.0, 4400.0, 5500.0, 6800.0]), n_components=1 + ) + fig.canvas.draw() + except Exception as exc: + assert False, f"Valid default eigen-spectrum labels must render: {exc}" + assert_array_equal(axes[0].lines[0].get_ydata(), pca.loadings[0]) + + +def test_linear_histogram_truncation_discloses_population( + visualizer_case, visualizer_contracts, monkeypatch +): + """R10 candidate: conditional renormalization is not full-class coverage.""" + c = visualizer_case + stars = np.linspace(0.01, 0.1, 40) + qso = np.r_[[0.04, 0.09, 0.1], np.linspace(4, 7, 47)] + values = np.r_[stars, qso] + labels = np.array(["STAR"] * 40 + ["QSO"] * 50) + calls = visualizer_contracts.capture_histograms(monkeypatch) + _, axes = c.viz.plot_ae_error_distribution_logscale(values, labels) + call = next( + call for call in calls if call["ax"] is axes[0] and "QSO" in call["label"] + ) + missing, edges = visualizer_contracts.assert_histogram_population(call, qso) + area = sum(p.get_width() * p.get_height() for p in call["result"][2]) + assert_allclose(area, 1) + assert missing == 0 or visualizer_contracts.exclusion_report( + axes[0], "QSO", missing, 50, edges + ), f"Silent conditional histogram: represented={50-missing}/50, area={area}, median={np.median(qso)}" diff --git a/tests/test_dimred_visualizer.py b/tests/test_dimred_visualizer.py index f8f7624..1de00d1 100644 --- a/tests/test_dimred_visualizer.py +++ b/tests/test_dimred_visualizer.py @@ -49,8 +49,10 @@ def test_embedding_exact_observation_associations(visualizer_case, mode): assert_array_equal(offsets(ax.collections[0]), c.Z[[1, 4]]) assert_array_equal(offsets(ax.collections[1]), c.Z[[0, 2, 3, 5]]) assert_array_equal(ax.collections[1].get_array(), [8, 3, 21, 1]) - # Linear interpolation on sorted [1,3,8,21], at .06 and 2.94. - assert_allclose(ax.collections[1].get_clim(), [1.12, 20.22]) + # A finite nondegenerate color range is required; clipping quantiles + # remain an open display policy rather than a fixed 2/98 implementation. + limits = ax.collections[1].get_clim() + assert np.isfinite(limits).all() and limits[0] < limits[1] assert fig.axes[-1].get_ylabel() == "measured scalar" else: assert_array_equal(offsets(ax.collections[0]), c.Z) @@ -162,6 +164,13 @@ def test_family_weights_bar_and_donut_angles(visualizer_case): _, ax = c.viz.plot_loadings_family_bar(first, second, colors) assert [t.get_text() for t in ax.get_xticklabels()] == ["A", "B", "C"] assert_allclose(heights(ax), [80, 20, 0, 0, 30, 70]) + handles, labels = ax.get_legend_handles_labels() + series = { + label.replace(" ", "").upper(): handle for handle, label in zip(handles, labels) + } + assert set(series) == {"PC1", "PC2"} + assert_allclose([p.get_height() for p in series["PC1"]], [80, 20, 0]) + assert_allclose([p.get_height() for p in series["PC2"]], [0, 30, 70]) _, axes = c.viz.plot_loadings_family_donut(first, second, colors) for ax, weights in zip(axes, [[0.8, 0.2], [0.3, 0.7]]): assert_allclose( @@ -277,6 +286,8 @@ def test_interpolation_actual_path_feature_order_and_endpoints(visualizer_case): assert_allclose(axes[0].collections[0].get_array(), [0, 0.5, 1]) assert_array_equal(offsets(axes[0].collections[1]), Z[[0]]) assert_array_equal(offsets(axes[0].collections[2]), Z[[-1]]) + assert axes[0].collections[1].get_label() == "A" + assert axes[0].collections[2].get_label() == "B" assert [t.get_text() for t in axes[1].get_xticklabels()] == [ "fast", "middle", @@ -342,7 +353,17 @@ def test_histogram_densities_integrate_and_class_mean_median_are_distinct( # Each class has its own normalized density, even with unequal counts. for container in ax.containers: assert_allclose(sum(p.get_width() * p.get_height() for p in container), 1) - assert "STAR (n=3, μ=5.3333)" in ax.get_legend_handles_labels()[1] + import re + + star_label = next( + label + for label in ax.get_legend_handles_labels()[1] + if re.search(r"\bSTAR\b", label) + ) + assert re.search(r"\b3\b", star_label) + assert any( + abs(float(v) - 16 / 3) < 5e-5 for v in re.findall(r"\d+\.\d+", star_label) + ) assert_allclose([line.get_xdata()[0] for line in ax.lines], [4, 7, 6]) _, axes = c.viz.plot_ae_error_distribution_logscale(values, c.y) assert axes[1].get_xscale() == "log" @@ -376,6 +397,14 @@ def test_hdbscan_real_analyzer_state_and_point_populations( assert_allclose(sc.get_facecolors()[0, :3], hdb.color_map_[cid][:3]) for sc, cls in zip(axes[1].collections, sorted(set(c.y))): assert_array_equal(offsets(sc), c.Z[c.y == cls]) + import re + + assert re.search( + rf"\b{cls}\b", sc.get_label() + ), "Class label differs from plotted population" + assert re.search( + rf"\bn\s*=\s*{sum(c.y==cls)}\b|\(\s*{sum(c.y==cls)}\s*\)", sc.get_label() + ) assert f"n={labels.count(-1)}" in text(axes[0]) @@ -473,9 +502,17 @@ def test_xgboost_classes_confidence_and_cluster_associations( _, axes = c.viz.plot_xgboost_umap(c.Z, pred, confidence, cl, {2: "red", 7: "blue"}) for sc, cls in zip(axes[0].collections, ["F", "G", "M"]): assert_array_equal(offsets(sc), c.Z[pred == cls]) + import re + + assert re.search( + rf"\b{cls}\b", sc.get_label() + ), "Prediction label differs from its actual points" assert f"n={(pred == cls).sum()}" in sc.get_label() if confidence is None: - assert "non disponible" in text(axes[1]) + assert not axes[1].collections + assert text( + axes[1] + ).strip(), "Unavailable confidence needs an explicit diagnostic" else: assert_array_equal(offsets(axes[1].collections[0]), c.Z) assert_array_equal(axes[1].collections[0].get_array(), confidence) @@ -493,7 +530,11 @@ def test_fg_population_threshold_and_overlays(visualizer_case): assert_array_equal(offsets(ax.collections[0]), Z) assert_array_equal(offsets(ax.collections[1]), Z[:3]) assert_array_equal(offsets(ax.collections[2]), Z[5:]) - assert ax.get_legend_handles_labels()[1] == ["Prédit F (n=3)", "Prédit G (n=8)"] + import re + + for cls, count, label in zip(["F", "G"], [3, 8], ax.get_legend_handles_labels()[1]): + assert re.search(rf"\b{cls}\b", label) + assert re.search(rf"\b{count}\b", label) def rank_trustworthiness(X, Z, k): @@ -519,17 +560,39 @@ def rank_trustworthiness(X, Z, k): @pytest.mark.integration @pytest.mark.parametrize("subsample", [12, 9]) def test_real_sklearn_trustworthiness_independent_rank_oracle( - visualizer_case, subsample + visualizer_case, subsample, monkeypatch ): c = visualizer_case rng = np.random.default_rng(1729) X = rng.normal(size=(12, 2)) bad = X[np.array([7, 0, 9, 4, 1, 10, 2, 11, 3, 6, 5, 8])] - idx = np.random.default_rng(42).choice(12, size=subsample, replace=False) - _, ax = c.viz.plot_trustworthiness( - X, X.copy(), bad, k_values=[1, 2, 3], n_subsample=subsample - ) - expected = [rank_trustworthiness(X[idx], bad[idx], k) for k in [1, 2, 3]] + import sklearn.manifold + + real = sklearn.manifold.trustworthiness + calls = [] + + def measured(ref, embedding, **kwargs): + calls.append((ref.copy(), embedding.copy(), kwargs["n_neighbors"])) + return real(ref, embedding, **kwargs) + + monkeypatch.setattr(sklearn.manifold, "trustworthiness", measured) + for repeat in range(2): + _, ax = c.viz.plot_trustworthiness( + X, X.copy(), bad, k_values=[1, 2, 3], n_subsample=subsample + ) + assert len(calls) == 12 + expected = [] + for i, (ref, embedding, k) in enumerate(calls[:6]): + indices = [ + next(j for j, row in enumerate(X) if np.array_equal(row, r)) for r in ref + ] + assert len(set(indices)) == subsample + assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices]) + assert_array_equal(calls[i + 6][0], ref) + assert_array_equal(calls[i + 6][1], embedding) + assert_array_equal(ref, calls[0][0]) + if i % 2: + expected.append(rank_trustworthiness(ref, embedding, k)) assert_allclose(ax.lines[0].get_ydata(), [1, 1, 1], atol=1e-14) assert_allclose(ax.lines[1].get_ydata(), expected, atol=1e-14) assert_array_equal(ax.lines[1].get_xdata(), [1, 2, 3]) @@ -588,7 +651,13 @@ def test_synthesis_preserves_distinct_geometries_and_physical_colors( fig = c.viz.plot_synthesis_grid(ae, c.y, c.meta, pca, embedding if umap else None) data_axes = [a for a in fig.axes if a.get_xlabel()] geometries = [pca] + ([embedding] if umap else []) + [ae] + import re + for row, Z in enumerate(geometries): + expected_name = ( + [r"\bPCA\b"] + ([r"\bUMAP\b"] if umap else []) + [r"autoencod|\bAE\b"] + )[row] + assert re.search(expected_name, data_axes[row * 3].get_ylabel(), re.I) for sc in data_axes[row * 3].collections: assert_array_equal(offsets(sc), Z[c.y == sc.get_label()]) for col, param in [(1, "teff_gspphot"), (2, "mh_gspphot")]: @@ -599,7 +668,7 @@ def test_synthesis_preserves_distinct_geometries_and_physical_colors( @pytest.mark.parametrize("suffix", ["png", "pdf"]) def test_real_export_readable_and_same_semantic_figure( - visualizer_case, tmp_path, suffix + visualizer_case, tmp_path, suffix, visualizer_contracts ): from PIL import Image @@ -613,6 +682,7 @@ def test_real_export_readable_and_same_semantic_figure( with Image.open(path) as im: pixels = np.asarray(im.convert("RGB")) assert pixels.shape[0] > 100 and pixels.std() > 1 + visualizer_contracts.assert_png_matches_figure(path, fig, c.viz.dpi) else: assert path.read_bytes().startswith(b"%PDF-") assert b"%%EOF" in path.read_bytes()[-50:] diff --git a/tests/test_visualizer_review_contracts.py b/tests/test_visualizer_review_contracts.py new file mode 100644 index 0000000..596d5ae --- /dev/null +++ b/tests/test_visualizer_review_contracts.py @@ -0,0 +1,71 @@ +"""Check the new review adapters against correct and misleading alternatives.""" + +import numpy as np +from numpy.testing import assert_allclose +import pytest + + +def test_analytic_estimator_protocol_is_probability_consistent(visualizer_contracts): + oracle = visualizer_contracts.AnalyticGaussian( + np.array([[1.0, 2, 3], [-1.0, 2, 4]]) + ) + assert (oracle.d, oracle.n, oracle.factor) == (2, 3, 1) + assert_allclose(oracle.covariance, np.diag([4, 9])) + points = np.array([[0.0, 2.0, 0.0], [0.0, 0.0, 3.0]]) + assert_allclose( + oracle(points), np.array([1, np.exp(-0.5), np.exp(-0.5)]) / (12 * np.pi) + ) + assert_allclose(oracle.evaluate(points), oracle(points)) + draws = oracle.resample(40000, seed=np.random.default_rng(11)) + assert_allclose(draws.mean(axis=1), [0, 0], atol=0.05) + assert_allclose(np.cov(draws), np.diag([4, 9]), atol=0.12) + + +@pytest.mark.parametrize( + "message,admitted", + [ + ("T(k) < 0.75 hors champ : min = 0.500", True), + ("t-SNE outside range below 0.75; minimum 0.500", True), + ("Warning: clipped values", False), + ("T(k) < 0.75 hors champ : min = 0.700", False), + ], +) +def test_clipping_disclosure_requires_actual_bound_and_extreme( + visualizer_case, visualizer_contracts, message, admitted +): + _, ax = visualizer_case.plt.subplots() + ax.set_ylim(0.75, 1.01) + ax.text(0.5, 0.5, message) + if admitted: + visualizer_contracts.assert_visible_or_disclosed( + ax, {"t-SNE": [0.5, 0.6], "UMAP": [1, 1]} + ) + else: + with pytest.raises(AssertionError, match="Undisclosed"): + visualizer_contracts.assert_visible_or_disclosed( + ax, {"t-SNE": [0.5, 0.6], "UMAP": [1, 1]} + ) + + +@pytest.mark.parametrize("swap", [False, True]) +def test_categorical_legend_maps_ids_to_actual_data_colors( + visualizer_case, visualizer_contracts, swap +): + from matplotlib.patches import Patch + + c = visualizer_case + fig, ax = c.plt.subplots() + labels = np.array([2, 7, 2, 7, 2, 7]) + for cid, color in [(2, "red"), (7, "blue")]: + ax.scatter(*c.Z[labels == cid].T, c=color) + colors = ["blue", "red"] if swap else ["red", "blue"] + ax.legend( + handles=[ + Patch(color=col, label=f"Cluster {cid}") for cid, col in zip([2, 7], colors) + ] + ) + if swap: + with pytest.raises(AssertionError, match="Misleading categorical"): + visualizer_contracts.assert_cluster_encoding(fig, ax, labels, c.Z) + else: + visualizer_contracts.assert_cluster_encoding(fig, ax, labels, c.Z) diff --git a/tests/visualizer_review_contracts.py b/tests/visualizer_review_contracts.py new file mode 100644 index 0000000..03bc6b4 --- /dev/null +++ b/tests/visualizer_review_contracts.py @@ -0,0 +1,259 @@ +"""Bounded numeric/artist oracles for the M2.8 review, not production helpers.""" + +from io import BytesIO +import re + +import numpy as np +from numpy.testing import assert_allclose, assert_array_equal + + +def tokens(label): + return set(re.findall(r"[\w]+", label.casefold())) + + +def numbers(label): + normalized = re.sub(r"(?<=\d)[ \u202f\u00a0](?=\d{3}(?:\D|$))", "", label) + return [ + float(n) + for n in re.findall(r"[-+]?\d+(?:[.,]\d+)?(?:e[-+]?\d+)?", normalized, re.I) + ] + + +def assert_class_label(label, cls, count): + assert cls.casefold() in tokens(label), (label, cls) + assert float(count) in numbers(label), (label, count) + + +def assert_png_matches_figure(path, fig, dpi): + """Compare decoded pixels with this same figure's explicit backend export. + + This is a within-process semantic reference, not a cross-version PNG hash. + Axes-only clones differ from the reference even though both have ink. + """ + from PIL import Image + + reference = BytesIO() + fig.savefig(reference, format="png", bbox_inches="tight", dpi=dpi) + reference.seek(0) + with Image.open(reference) as image: + expected = np.asarray(image.convert("RGBA")) + with Image.open(path) as image: + actual = np.asarray(image.convert("RGBA")) + assert ( + actual.shape == expected.shape + ), "Export geometry differs from the returned figure" + assert_allclose( + actual, + expected, + atol=1, + rtol=0, + err_msg="Exported scientific artists differ from the returned figure", + ) + + +class AnalyticGaussian: + """Estimator-protocol oracle for exactly N(0, diag(4,9)). + + ``dataset`` records supplied observations for population auditing. The + represented law is one analytic Gaussian, not an empirical kernel mixture. + ``covariance`` and ``factor=1`` describe that Gaussian; resample and evaluate + use the same law. This supports grid- and simulation-based level solvers. + """ + + def __init__(self, dataset, bw_method=None, weights=None): + self.dataset = np.asarray(dataset).copy() + self.d, self.n = self.dataset.shape + self.factor = 1.0 + self.covariance = np.diag([4.0, 9.0]) + self.inv_cov = np.diag([0.25, 1 / 9]) + self.weights = np.full(self.n, 1 / self.n) + self.neff = float(self.n) + + def evaluate(self, points): + points = np.atleast_2d(points) + exponent = (points[0] / 2) ** 2 + (points[1] / 3) ** 2 + return np.exp(-exponent / 2) / (12 * np.pi) + + __call__ = evaluate + pdf = evaluate + + def resample(self, size=None, seed=None): + size = self.n if size is None else size + rng = ( + seed + if isinstance(seed, (np.random.Generator, np.random.RandomState)) + else np.random.default_rng(seed) + ) + return rng.normal(size=(2, size)) * np.array([[2.0], [3.0]]) + + +def capture_histograms(monkeypatch): + """Forward real hist calls and retain their effective populations and artists.""" + from matplotlib.axes import Axes + + original = Axes.hist + calls = [] + + def hist(ax, values, *args, **kwargs): + result = original(ax, values, *args, **kwargs) + calls.append( + dict( + ax=ax, + values=np.asarray(values).copy(), + result=result, + density=kwargs.get("density", False), + label=kwargs.get("label", ""), + ) + ) + return result + + monkeypatch.setattr(Axes, "hist", hist) + return calls + + +def assert_histogram_population(call, expected): + """Count samples independently, including the closed final bin endpoint.""" + expected = np.asarray(expected) + _, edges, patches = call["result"] + actual_values = call["values"] + wanted = [ + sum((v >= a) and (v < b or (i == len(edges) - 2 and v == b)) for v in expected) + for i, (a, b) in enumerate(zip(edges[:-1], edges[1:])) + ] + received = [ + sum( + (v >= a) and (v < b or (i == len(edges) - 2 and v == b)) + for v in actual_values + ) + for i, (a, b) in enumerate(zip(edges[:-1], edges[1:])) + ] + assert_array_equal( + received, + wanted, + "Histogram omitted observations inside its own displayed support", + ) + assert sum(wanted) > 0, "A nominal distribution must contain observations" + plotted = np.array([p.get_height() for p in patches]) + reference = np.array(wanted, dtype=float) + if call["density"]: + reference /= sum(wanted) * np.diff(edges) + assert_allclose(plotted, reference, atol=1e-10, rtol=1e-10) + missing = len(expected) - sum(wanted) + return missing, edges + + +def exclusion_report(ax, cls, missing, total, edges): + """Bounded disclosure: population, excluded/total counts and support bound.""" + for artist in ax.texts: + label = artist.get_text() + if not tokens(label).intersection( + {"outside", "excluded", "hors", "exclus", "exclues", "tronque"} + ): + continue + vals = numbers(label) + if cls.casefold() in tokens(label) and missing in vals and total in vals: + if any( + any(abs(v - bound) <= max(5e-4, abs(bound) * 0.005) for v in vals) + for bound in [edges[0], edges[-1]] + ): + return True + return False + + +def assert_visible_or_disclosed(ax, series): + """Admit a clipped T(k) curve only with exact bound/extreme information. + + A single clipped curve can be identified by context. Several clipped curves + require separate method identification. Generic warnings are insufficient. + """ + lo, hi = sorted(ax.get_ylim()) + clipped = [ + (name, np.asarray(vals)[(np.asarray(vals) < lo) | (np.asarray(vals) > hi)]) + for name, vals in series.items() + ] + clipped = [(name, vals) for name, vals in clipped if len(vals)] + for name, vals in clipped: + admitted = False + for artist in ax.texts: + label = artist.get_text() + ns = numbers(label) + if not tokens(label).intersection( + {"outside", "excluded", "hors", "exclus", "clipped"} + ): + continue + if len(clipped) > 1 and name.casefold() not in label.casefold(): + continue + bounds = ( + [lo] if np.all(vals < lo) else [hi] if np.all(vals > hi) else [lo, hi] + ) + extremes = ( + [min(vals)] + if np.all(vals < lo) + else [max(vals)] if np.all(vals > hi) else [min(vals), max(vals)] + ) + if all(any(abs(n - v) <= 5e-4 for n in ns) for v in bounds + extremes): + admitted = True + assert admitted, f"Undisclosed clipped values for {name}: {vals}, range={lo,hi}" + + +def assert_cluster_encoding(fig, ax, labels, coordinates): + """Accept colorbar, legend handles, or colored textual cluster annotations.""" + from matplotlib.colors import to_rgba + + legend = ax.get_legend() + entries = ( + [] + if legend is None + else list(zip(legend.legend_handles, [t.get_text() for t in legend.texts])) + ) + colorbars = [ + a._colorbar for a in fig.axes if getattr(a, "_colorbar", None) is not None + ] + for cid in sorted(set(labels) - {-1}): + expected = coordinates[labels == cid] + collection = next( + ( + sc + for sc in ax.collections + if np.array_equal(np.asarray(sc.get_offsets()), expected) + ), + None, + ) + assert collection is not None, f"Missing actual cluster {cid}" + rgb = collection.get_facecolors()[0, :3] + choices = [] + for cb in colorbars: + # Temperature colorbars are not categorical-ID encodings. + if re.search(r"cluster|\bid\b", cb.ax.get_ylabel(), re.I): + choices.append(cb.mappable.to_rgba(cid)[:3]) + if choices: + assert all( + np.allclose(choice, rgb) for choice in choices + ), f"Misleading colorbar for C{cid}" + continue + for handle, label in entries: + if re.search(rf"\bC\s*{cid}\b|cluster\s*{cid}\b", label, re.I): + if hasattr(handle, "get_facecolor"): + choices.append( + np.asarray(handle.get_facecolor()).reshape(-1, 4)[0, :3] + ) + elif hasattr(handle, "get_color"): + choices.append(np.asarray(to_rgba(handle.get_color()))[:3]) + if choices: + assert all( + np.allclose(choice, rgb) for choice in choices + ), f"Misleading categorical legend for C{cid}" + continue + for annotation in ax.texts: + if re.fullmatch(rf"C\s*{cid}", annotation.get_text().strip(), re.I): + bbox = annotation.get_bbox_patch() + choices.append( + np.asarray( + bbox.get_facecolor() + if bbox is not None + else to_rgba(annotation.get_color()) + )[:3] + ) + assert any( + np.allclose(choice, rgb) for choice in choices + ), f"No faithful ID/color encoding for C{cid}" From a8bc8506804cf4c89e784e458498d3f229ca81cb Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Fri, 13 Nov 2026 12:05:49 -0500 Subject: [PATCH 5/8] test(dimred): archive revised M2.8 review evidence --- audit/M28_DIMRED_VISUALIZER.md | 59 +- audit/M28_PROOFS.md | 4 + audit/M28_REVIEW_PROOFS.md | 239 + audit/check_m28_evidence.py | 2 +- audit/check_m28_review.py | 19 +- .../m28_review_controls_initial_results.json | 15306 +++++++++++ ...8_review_discrimination_final_results.json | 11779 ++++++++ audit/m28_review_discrimination_results.json | 10765 ++++++++ audit/m28_review_frozen_controls_results.json | 9944 +++++++ .../m28_review_frozen_mutations_results.json | 10088 +++++++ audit/m28_review_frozen_order_results.json | 107 + audit/m28_review_frozen_results.json | 22221 ++++++++++++++++ .../m28_review_frozen_validation_results.json | 151 + audit/m28_review_geometry_final_results.json | 10051 +++++++ audit/m28_review_geometry_results.json | 9410 +++++++ audit/m28_review_hist_disclosure_results.json | 492 + audit/m28_review_kde_initial_results.json | 4279 +++ audit/m28_review_kde_results.json | 10060 +++++++ audit/m28_review_mutations_final_results.json | 10083 +++++++ audit/m28_review_mutations_results.json | 10083 +++++++ ..._review_old_archive_integrity_results.json | 1223 + audit/m28_review_order_results.json | 87 + ...eview_original_controls_final_results.json | 9944 +++++++ .../m28_review_original_controls_results.json | 9943 +++++++ audit/m28_review_proof_baseline_results.json | 1244 + audit/m28_review_reverse_results.json | 2396 ++ audit/m28_review_threads.json | 150 + .../m28_review_validation_final_results.json | 151 + audit/m28_review_validation_results.json | 147 + tests/proofs_dimred_visualizer.py | 4 +- tests/test_visualizer_review_contracts.py | 20 + tests/visualizer_review_contracts.py | 16 +- 32 files changed, 160452 insertions(+), 15 deletions(-) create mode 100644 audit/M28_REVIEW_PROOFS.md create mode 100644 audit/m28_review_controls_initial_results.json create mode 100644 audit/m28_review_discrimination_final_results.json create mode 100644 audit/m28_review_discrimination_results.json create mode 100644 audit/m28_review_frozen_controls_results.json create mode 100644 audit/m28_review_frozen_mutations_results.json create mode 100644 audit/m28_review_frozen_order_results.json create mode 100644 audit/m28_review_frozen_results.json create mode 100644 audit/m28_review_frozen_validation_results.json create mode 100644 audit/m28_review_geometry_final_results.json create mode 100644 audit/m28_review_geometry_results.json create mode 100644 audit/m28_review_hist_disclosure_results.json create mode 100644 audit/m28_review_kde_initial_results.json create mode 100644 audit/m28_review_kde_results.json create mode 100644 audit/m28_review_mutations_final_results.json create mode 100644 audit/m28_review_mutations_results.json create mode 100644 audit/m28_review_old_archive_integrity_results.json create mode 100644 audit/m28_review_order_results.json create mode 100644 audit/m28_review_original_controls_final_results.json create mode 100644 audit/m28_review_original_controls_results.json create mode 100644 audit/m28_review_proof_baseline_results.json create mode 100644 audit/m28_review_reverse_results.json create mode 100644 audit/m28_review_threads.json create mode 100644 audit/m28_review_validation_final_results.json create mode 100644 audit/m28_review_validation_results.json diff --git a/audit/M28_DIMRED_VISUALIZER.md b/audit/M28_DIMRED_VISUALIZER.md index 14f51e5..6fb6e68 100644 --- a/audit/M28_DIMRED_VISUALIZER.md +++ b/audit/M28_DIMRED_VISUALIZER.md @@ -8,6 +8,58 @@ preserved. Production blob **624b857bca5833c3401204b0a592b9ae6ffc2902**. Actual inventory: **38 methods**, including initializer and two helpers, not31. Entire3224-line source read. AGENTS v1.3 fetched from current main. +## Revision after Claude review 5858927009 ? 2026-11-13 + +This revision resumes PR #116 at `4364c61f56d91f7ec93c5c6072b9f88c46023241`; +all first-pass results below remain historical. Production and the original +archive `ed1d91ec0efb619aeb77a5bf7e4a0ab43fa84cac` are unchanged. The current +review manifest is [M28_REVIEW_PROOFS.md](M28_REVIEW_PROOFS.md). The 53 original +green nodes remain; eight adapter controls are added. No production fix is +part of these tests. All twelve GitHub threads remain reviewer-owned. + +| Review | Revised contract and scope | +|---|---| +| R1 | Three STAR bimodal anisotropic mixtures (seeds 31/7/83) plus distinct QSO; inspect fitted observations, actual contour labels, vertices and polygon probability. Retain analytic Gaussian and independent expanded quadrature. K1B/K6/K7/K8 and missing-mode K9 exercise different failures. | +| R2a | Analytic law has dataset/d/n/covariance/factor, coherent evaluate/call/resample; K4 sampling and K5 kernel-support quadrature are admissible solvers. A complete display domain accompanies each solver when testing enclosed polygons. | +| R2b | Cluster ID -> actual scatter RGB -> colorbar, categorical Patch/Line legend or colored annotation. A contradictory colorbar is rejected even if other annotations are correct. | +| R3 | HR bounds derive from input K/dex independently; reconstruction needs nonempty paired arrays; histograms require independently counted observations and bar heights; exports match an explicit same-figure rendering. | +| R4/R5 | Class/count/coordinates, synthesis method/geometry, endpoint identity, PC series/value and exported data collections are linked. Exact French prose is not the contract. | +| R6 | Population annotations accept grouped numbers and N= wording; variance annotations link PC count and full-model cumulative variance in either word order. Omission of a questionable claim remains admissible. | +| R7 | Full visibility OR a verifiable disclosure with actual excluded population/count/support or curve boundary/extreme. Generic warnings and false numbers fail. Zero/negative/nonfinite histogram policies remain open. | +| R8 | Capture real sklearn subsets, recover supplied observation rows and check pairing, independent ranks, values and repeatability. A paired permutation sampler is admissible; no particular RNG choice sequence is required. | +| R9 | Inventory corrected to 38/38 below. HR missing-column sentinel AP; provided-data scatter/orientation and dimensional region geometry PA; astrophysical region taxonomy/boundaries NA. | +| R10 | Independently reproduced linear conditional-density clipping: QSO 3/50 retained, area 1. New characterization and a P2 issue proposal only; distinct from #111 log floor. No new issue created. | +| R11/R12 | D04 reassigns original F row 8, not row 5. Corrected issue anchors #103:3215, #104:2588, #105:1415/1560, #110:185/186, #111:2824, #114:2279 at the unchanged base SHA, with dated documentary notes. | +| R13 | Six mh_gspphot -> Fe/H labels (437/616/1100/2311/2455/2892) remain PA interpretation, not a validated abundance conversion. Fixed 3-PC/183-feature/min_size300 titles and anomaly prose also PA; #65/#78 retain policy ownership. | +| R14 | Explicitly lint all four M2.8 audit scripts locally; CI workflow remains unchanged and does not gain audit-script linting implicitly. Historical absolute Windows paths are preserved as execution provenance. | + +The KDE mass tolerance .006 is numerical discretization, not astrophysical +uncertainty. The analytic covariance is diag(4,9); its polar integral is +max(0,1-12*pi*threshold). Mixture quadrature has 0.05 spacing on [-12,18] x +[-14,14], total probability within 1e-4 of one. Polygon membership is computed +independently from actual pre-inline-label paths (even/odd rule for disjoint +components and holes), in addition to density-threshold integration. The +geometry interpolation tolerance is 5% on the 200x200 contour mesh. Experiments +showed that merely correcting levels can leave open 99% arcs on the original +percentile domain; current admissible controls also complete that domain. +These bounds and tolerances do not validate all KDE input distributions. + +PNG comparison decodes RGBA against the explicit backend export of the same +returned scientific figure, within the same process (one-channel-unit tolerance). +It does not use a version-specific golden image. Blank and axes-only exports +are rejected; PDF scientific rendering and cross-version agreement remain PA. + +Current validation: **61 dedicated PASS with -W error**, complete default, +importlib and reversed suites **693 PASS / 62 deselected / 7 preexisting Gaia +warnings**. Dedicated reversed and shuffled orders (3/11/29) each 61 PASS. +Original M01?M16: **16 KILLED**; original C01?C14: **14 PASS** and F01?F03: +**3 KILLED**. Review campaign: **19 KILLED**, **12 admissible controls PASS**, +and **87/87 joint PASS**, with zero surviving/inconclusive current candidates. +Revised red baseline: **25 FAIL / 1 PASS**, 26 cases. This is evidence on bounded +contracts, not 25 bugs or scientific approval. See the new manifest for exact +ledgers, code hashes, archive reference and replay commands. Historical results +below are not attributed to this pass. + ## Delivery contract and evidence boundaries AP: acquired evidence on the specific tested contract; PA: partial examination; @@ -64,11 +116,12 @@ limited existing boundaries, not previous coverage of every figure. | `plot_loadings_family_donut` | two family frames -> two donut helpers -> `(fig,axes)` | angles/legend weights | AP normalized inputs; hardcoded183-feature title PA | | `plot_loadings_family_bar` | family union -> percentages -> `(fig,ax)` | disjoint family weights80/20 vs30/70 | AP numeric; empty/zero-group policy PA | | `plot_correlation_heatmap` | correlation frame -> labels/image/text -> `(fig,ax)` | exact matrix/ticks/finite annotations | AP representation; estimator and metallicity interpretation NA | -| `plot_embedding` | Z/class/scalar -> positional scatter -> `(fig,ax)` | classes/plain/continuous+missing, percentiles | AP paired valid arrays; invalid coordinates boundary PA | +| `plot_embedding` | Z/class/scalar -> positional scatter -> `(fig,ax)` | classes/plain/continuous+missing, finite scaling | AP paired valid arrays; quantile/clim choice and invalid coordinates boundary PA | | `plot_embedding_grid` | Z/y/meta -> class+parameter panels -> `(fig,axes)` | coherent permutation/absent column/missing rows | AP nominal; all-missing/Inf scaling PA | | `plot_stability` | ordered report -> bars/reference-excluded mean -> `(fig,ax)` | actual producer with controlled fit; asymmetric mean | AP producer order0..N-1; arbitrary reordered reports PA; stability not astrophysics | | `plot_reconstruction_error` | PCA summary -> mean±SD+elbow -> `(fig,ax)` | actual discarded-energy MSE and band | AP statistics; nonuniform count elbow heuristic PA; log zero hidden | | `plot_eigenspectra` | PCA vectors/wavelength -> line+markers -> `(fig,axes)` | exact wavelength/values/in-range markers,1/3/10 requested | AP custom marker path; default mathtext and fixed3-PC title PA | +| `plot_hr_teff_regions` | supplied Teff(K)/log g(dex) -> scatter + illustrative polygons -> `(fig,ax)` | green missing-column sentinel; D02 input-domain geometry and D03 actual population | AP missing-column sentinel only; PA supplied scatter/orientation and dimensional polygon envelope; NA stellar taxonomy and astrophysical delimitations (including N08) | | `plot_hr_diagram_embedding` | meta/Z component -> finite triplets -> `(fig,ax)` | missing on distinct rows, two axes, units/inversion | AP provided values; actual stellar stages NA | | `plot_training_history` | train/val/LR -> curves/best epoch -> `(fig,axes)` | nonlast minimum, distinct series, real explicit export | AP numeric; direct output_dir mismatch red; train-loss semantics #84 | | `plot_ae_embedding` | 2D Z/y/meta -> class+physical panels -> `(fig,axes)` | coherent row permutation/missing physical row | AP nominal; no-physical scalar axes red | @@ -128,7 +181,7 @@ GPU/W&B/network, visual publication review, cross-version image/PDF agreement, all filesystem failures, notebook execution and line coverage. No claim of historical figure corruption without its actual run artifact. -## Delivered evidence and first independent review +## First-pass delivery ? historical results before Claude review **53 dedicated green cases**, actual Windows/Python3.11.9 execution: [validation ledger](m28_validation_results.json). Normal and importlib full @@ -248,7 +301,7 @@ at the consumer and linked to #90/#106, not claimed as calibrated probabilities. Collinear/two-point backend acceptance can depend on floating covariance; no successful density computation alone certifies a meaningful2D population. -### Questions for Claude +### First-pass questions for Claude ? historical Challenge numerical oracles and adapter limits first: KDE grid tails and label meaning; mismatched population refusal versus information unavailable to the diff --git a/audit/M28_PROOFS.md b/audit/M28_PROOFS.md index 46eb98f..ec7dade 100644 --- a/audit/M28_PROOFS.md +++ b/audit/M28_PROOFS.md @@ -1,5 +1,9 @@ # M2.8 — immutable red evidence manifest +> Revision 2026-11-13: this manifest and its counts describe the **first pass**. +> The original archive is preserved unchanged. See [revised proof manifest](M28_REVIEW_PROOFS.md) +> for corrected oracles, new archive and review campaigns. + Refs #43. Base39dad874610745ccd456d26972e90f6fb3a11405; production visualizer blob624b857bca5833c3401204b0a592b9ae6ffc2902 unchanged. `tests/proofs_dimred_visualizer.py` is explicitly executed, never discovered diff --git a/audit/M28_REVIEW_PROOFS.md b/audit/M28_REVIEW_PROOFS.md new file mode 100644 index 0000000..c9f9a2b --- /dev/null +++ b/audit/M28_REVIEW_PROOFS.md @@ -0,0 +1,239 @@ +# M2.8 ? revised evidence after Claude review 5858927009 + +Revision date: 2026-11-13. Refs #43 / Draft PR #116. Same worktree +`AstroSpectro-m28`, same branch `audit/43-dimred-visualizer`; production blob +`624b857bca5833c3401204b0a592b9ae6ffc2902` and base +`39dad874610745ccd456d26972e90f6fb3a11405` unchanged. + +## Archives and historical separation + +- Original archive **ed1d91ec0efb619aeb77a5bf7e4a0ab43fa84cac**, original ref + `audit/43-dimred-visualizer-proofs`, preserved byte-for-byte. Historical + baseline: 22 cases, 21 FAIL / 1 PASS. The first-pass JSON ledgers are unchanged. +- Revised archive is designated by immutable tag + `audit/m28-review-proofs-2026-11-13` (full SHA recorded in the subsequent green + manifest and PR #116), read back from GitHub before normal + removal of `tests/proofs_dimred_visualizer.py` from the green head. +- The revised baseline is **26 cases: 25 FAIL / 1 PASS / 0 ERROR / 0 SKIP**, + executed in [baseline ledger](m28_review_frozen_controls_results.json). + These are the original D01?D15 groups plus one R10 characterization, not + 25 independent bugs. The passing profile `n_show=0` refusal remains a control. + +## Changes to the proof contracts + +D01 expands two cases to five: real Gaussian, analytic Gaussian, three +bimodal/anisotropic/non-Gaussian STAR populations with independent seeds and +QSO observations outside the stellar modes. The estimator's actual dataset +must consist of STAR rows. Contour percentages are read from actual label +formatters, linked to actual contour artists and pre-inline-label geometries. +Broad-grid numerical integration checks both the density superlevel probability +and probability in the actual polygons. Vertices must lie on the estimator's +iso-density. Even/odd polygon containment retains disjoint modes and holes. +The analytic law provides an independent polar integral and a coherent +sampling/evaluation protocol (dataset/d/n/covariance/factor/resample/evaluate). + +Numerical tolerances: total broad-grid mass within 1e-4 of one; labelled masses +within .006 (quadrature cell boundaries and contour interpolation, not physical +uncertainty); contour vertex density within 5% on the 200x200 display mesh. +Mixture integration uses spacing .05 on [-12,18] x [-14,14]. Gaussian integration +uses the independent 401x401 covariance-scaled [-8,8] domain. The original green +analytic quadrature check remains. Empirical coverage of observed stars is a +different quantity from probability of the fitted KDE and is not substituted. + +A further geometry experiment found that valid mass solvers alone can leave +open 99% arcs on the original percentile display domain. K4, K5 and C13 current +controls therefore also expand that display domain; the solver algorithms +remain different (resampling, kernel-support quadrature, broad-grid quadrature). +The exploratory failure is retained, not counted as a mathematical rejection +of those solvers. Complete contour geometry is part of the revised contract. + +D02 derives K/dex envelopes independently from supplied physical values and +dimensionally consistent 10%-range margins. This rejects extending axes to +hide -93 dex. It does not validate astrophysical regional taxonomy. D03 accepts +omission or the actual population, including grouped-number/N= syntax. D04 +corrects the explanatory row: original F row 8 is relabelled G after removal +of original G row 4; the independent F means stay 1140/13 and 1060/12. + +D05 accepts correct discrete colorbars, categorical Patch/Line legends, or +colored ID annotations. Any displayed categorical colorbar must be faithful; +good annotations cannot excuse a contradictory colorbar. It does not impose +an aesthetic palette. D09 requires actual nonempty original/reconstructed +arrays in every visible measurement panel, with the correct rows and count. +D10 links percentage/PC count to full-model cumulative variance in either +phrase order. D11/D12 capture real histogram inputs and independently count +sample membership in every bin, including the closed right endpoint; bar +heights must represent those counts. A legend-only fifth class is insufficient. + +D13 compares decoded PNG scientific content to an explicit export of the same +returned figure (RGBA, within-process, one channel unit). Blank images and +axes-only clones with removed data collections fail. Alternative canvas exports +remain admissible; PDF scientific rendering and cross-version image agreement +remain PA. D14 accepts full visibility or actual boundary/extreme information +for clipped curves, with method identity when needed. Histogram clipping needs +class identity, exact excluded/total counts and support information. Generic +warnings fail. Zero, negative and nonfinite MSE policies remain open. + +The original 53 green nodes are preserved and strengthened where requested. +Eight adapter controls add probability consistency, faithful/misleading +categorical legends and exact/misleading clipping disclosures. Green contracts +link XGB/HDB classes and counts to actual coordinates, PCA/UMAP/AE names to +row geometries, interpolation endpoints to supplied labels, and PC legends to +actual bar series. AE/autoencoder naming is semantic, not a French sentence. +Trustworthiness captures the real sklearn subsets, checks shared observation +indices, independently recomputes ranks and verifies repeatability. A different +paired deterministic sampling algorithm is admissible. + +## Campaign provenance and interpretation + +`check_m28_review.py` copies source/tests into synthetic TemporaryDirectories. +Each ledger retains exact patches, LF hashes, active parent HEAD, collection, +executed statement anchors and assertion texts. Wrong candidates use a passing +admissible joint baseline on the same selection; admissible controls record the +original production baseline (expected red for defective contracts). Every +changed hunk must be executed, collections must match and failures must be +assertions. Import/fixture/backend errors do not count as scientific kills. +A clean passing wrong candidate is reported SURVIVED, not silently accepted. +The joint experiment checks all green and red contracts together. None of these +synthetic remedies changes production or constitutes a proposed production PR. + +The `*_initial_results.json`, `m28_review_geometry_results.json` and +`m28_review_geometry_final_results.json` are exploratory checkpoints, not final +validation: the first polygon experiment exposed clipped contours; an early +A_HIST replacement literal was absent; mid-experiment test revisions triggered +the protected-input guard in exploratory runners. Their per-case observations +are retained, but authoritative final runs use frozen inputs and are listed +below. Original first-pass ledgers are never overwritten. + +## Frozen validation and exact replay + +The validation ledgers distinguish active parent HEAD from actual executed LF +hashes. The archive must match those tested bytes; documentary commits do not +retroactively turn an earlier parent SHA into a tested tree. Windows Python +3.11.9, NumPy 2.4.6, pandas 3.1.1, SciPy 1.17.1, sklearn 1.9.1, Matplotlib 3.11.2, +pytest 8.4.2, Pillow 13.0.0; Agg rendering and sockets blocked by test setup. + +| Execution | Actual result / ledger | +|---|---| +| Original 53 node IDs | All retained; 8 new adapter nodes, 61 total | +| Targeted `-W error` | 61 PASS ? [frozen validation](m28_review_frozen_validation_results.json) | +| Complete default/importlib suite | Each 693 PASS / 62 deselected / 7 preexisting Gaia warnings ? same ledger | +| Complete reversed/hashseed 7 | 693 PASS / 62 deselected / 7 warnings ? [order ledger](m28_review_frozen_order_results.json) | +| Targeted reversed + shuffle seeds 3/11/29, `-W error` | Each 61 PASS ? same order ledger | +| Black `--check`, Ruff, pip check, diff/check and protected paths | PASS, including all four M2.8 audit scripts ? frozen validation ledger | +| M01?M16 | 16 KILLED / 0 SURVIVED / 0 inconclusive, baseline 61 PASS ? [frozen mutations](m28_review_frozen_mutations_results.json) | +| Old archive replay | 21 FAIL / 1 PASS / 0 ERROR/SKIP ? [old archive verification](m28_review_old_archive_integrity_results.json) | + +Review campaign: **19 KILLED / 0 SURVIVED / 0 inconclusive** for incorrect +candidates; **12 admissible controls PASS**, plus **87/87 PASS** for the joint +experiment. Each wrong candidate has a passing comparable admissible baseline, +all edited hunks reached, matching collection and meaningful assertions. The +original-remedy campaign separately gives **14 PASS / 3 false remedies KILLED**. +These are bounded candidate experiments, not counts of distinct production bugs. + +| Review candidates | Result | +|---|---| +| K1B / K6 / K7 / K8 / K9 | All KILLED (family-only mass, swapped labels, wrong fitted population, transpose, removed mode) | +| FD02 / FD09 / FD11 / FD12 / FD13 | All KILLED (axes expansion, empty lines, filtered input, legend-only class, blank export) | +| FD03 / FD10 | Both KILLED (misleading count/PC annotation reformulations) | +| N01 / N02 / N03 / N04 / N05 / N06 / N10 | All KILLED (semantic/data association and axes-only export) | +| C13 / K4 / K5 | Each 5 PASS with independent solvers and complete contour display domain | +| AD05 / AC05 | Each 2 PASS for real cluster/HR encoding (legend/discrete colorbar) | +| A_TRUST / AD14 / A_EXPORT / A_METHODS | Paired sampler, precise clipped-curve disclosure, equivalent exports and AE naming PASS | +| A_HIST / AD_HIST / AD_LOG | Full histogram support, precise upper/lower exclusions PASS | +| JOINT | 87 PASS across all 61 green + 26 red cases | + +Only the **frozen** ledgers and the archive-verification/replay ledgers are +current delivery evidence. Other `m28_review_*results.json` files retain earlier +inputs and experiments; do not aggregate their totals. In particular, an early +AD_HIST candidate included unrelated joint patches, so its unexecuted hunks made +it INCONCLUSIVE; the final candidate is restricted to the actual histogram +change and passes the execution guard. No such inconclusive result is hidden +or counted as a scientific kill. + +The review-specific frozen campaign is recorded in +[m28_review_frozen_results.json](m28_review_frozen_results.json). It includes +actual pre-patch baselines, all edited statement anchors, matching collections, +assertion texts, exact candidate patches, tested hashes and a protected-input +guard. The original C01?C14 and F01?F03 are replayed separately in +[m28_review_frozen_controls_results.json](m28_review_frozen_controls_results.json). +C13 additionally completes the display domain for the polygon contract; this +revision does not alter its broad-grid probability algorithm. Earlier C13-only +solver observations remain in exploratory logs. + +On the revised archive checkout, execute red proofs explicitly: + +```powershell +python -m pytest -q tests/proofs_dimred_visualizer.py --tb=short +python audit/check_m28_review.py --output test-results/m28-review.json +python audit/check_m28_evidence.py --mode mutations --output test-results/m28-mutations.json +python audit/check_m28_evidence.py --mode proofs --output test-results/m28-controls.json +``` + +From the green checkout, use the immutable archive SHA below with: + +```powershell +python audit/check_m28_evidence.py --mode baseline --proofs-ref --output test-results/m28-red-replay.json +python audit/check_m28_review.py --proofs-ref --output test-results/m28-review-replay.json +python audit/check_m28_review.py --proofs-ref --only JOINT --output test-results/m28-joint.json +``` + +The runners reconstruct exact archived tests/fixtures/helpers in disposable +trees and check production equality. The red pytest exit 1 is expected; no +xfail hides it. The default baseline ref when the proof is absent is the fixed +review-proof tag. To replay the original archive, pass its full SHA explicitly. +Do not overwrite historical audit ledgers with replay outputs. + +CI is a separate hosted execution; its exact head/merge SHA, run link and +configured checks are recorded in the updated PR #116 and #43 handoff after the +new green head is pushed. Old CI run 42952227591 is first-pass history only. +CI does not execute the explicit red proofs or mutation campaigns. + +## R10 ? separate corrective issue proposal, awaiting human decision + +**Proposed title:** `fix: disclose population excluded from linear error histograms` + +**Probl?me:** at the unchanged production base, line 2833 sets the linear +histogram support to `[0, 1.5*P99(STAR)]`; `density=True` normalizes only retained +samples. Supply STAR=`linspace(.01,.1,40)`, QSO=`[.04,.09,.1] + linspace(4,7,47)`. +Upper support .14865 retains **3 of 50 QSO**, drops **47**, and still has **area 1**; +its labelled full-population median is **5.402173913...**, outside the support. +The archived `linear_histogram_truncation_discloses_population` test independently +counts input membership and the actual plotted bar area. + +**Pourquoi:** a reader can mistake conditional density for the full class +population. Proposed labels bug/science/P2, limited to this synthetic scenario; +no historical astronomical run/publication impact is established. + +**Attendu:** cover the relevant positive class population, or disclose precisely +which class, how many excluded out of its total and the support used. Conditional +normalization is admissible when that limitation is explicitly informative. + +**V?rification:** run the archived R10 selection. A_HIST full-support alternative +and AD_HIST exact exclusion disclosure are positive controls. The original +production fails by the meaningful 3/50 assertion, not a runtime error. + +**Hors scope:** production fixes, zero/negative/nonfinite policy, catalogues, +models, historical scientific results, and a new issue before human approval. + +Duplicate search (open and closed, 2026-11-13): `histogram`, `histogramme`, +`"star_p99"`, `"linear" "density"`, `renormalisation`; relevant #111 and #112 +read. #111 is the **logarithmic 1e-4 lower floor**; R10 is the **linear STAR-based +upper bound and conditional renormalization**. #112 is palette/class omission. +No matching separate issue found in these searches; **no new issue created**. + +## Residual scope and second review + +The method table now contains all 38 actual methods. AP denotes only tested +numeric contracts; regional geometry is PA and astrophysical taxonomy NA. +N08's hot/cold taxonomy shift is not claimed rejected. Historical N09 exception +failure is not promoted to a fresh assertion-based scientific kill. Metallicity +mh_gspphot versus Fe/H, fixed 3-PC/183-feature/min_size300 prose and anomaly +interpretation remain PA/open (#65/#78). No real catalogue/FITS/model run, +external identity proof, calibration, astrophysical validation or line coverage +is claimed. The API remains positional. Diagnostic adapters are bounded and +cannot parse every possible natural-language disclosure. + +The CI workflow is unchanged: it checks configured src/tests/scripts/app paths, +not audit scripts. All four M2.8 audit scripts are explicitly linted locally. +All twelve inline threads remain unresolved for Claude's second independent +review. PR #116 remains Draft; M2.8 yellow, #43 open, M2.9 not started. diff --git a/audit/check_m28_evidence.py b/audit/check_m28_evidence.py index 74e2036..276531e 100644 --- a/audit/check_m28_evidence.py +++ b/audit/check_m28_evidence.py @@ -380,7 +380,7 @@ def main(): and not (ROOT / PROOF).exists() and args.mode in ["baseline", "proofs"] ): - args.proofs_ref = "ed1d91ec0efb619aeb77a5bf7e4a0ab43fa84cac" + args.proofs_ref = "refs/tags/audit/m28-review-proofs-2026-11-13" protected = [SOURCE, GREEN, "tests/conftest.py"] before = {p: digest(ROOT / p) for p in protected} source = (ROOT / SOURCE).read_text(encoding="utf-8") diff --git a/audit/check_m28_review.py b/audit/check_m28_review.py index 0528511..cefd7bb 100644 --- a/audit/check_m28_review.py +++ b/audit/check_m28_review.py @@ -156,7 +156,11 @@ def joint(source): "zip(classes, palette*((len(classes)+len(palette)-1)//len(palette)))", ) source = exports(source) - # R10 uses the human-selected visible-or-exactly-disclosed contract. + source = disclose_histogram(source) + return source + + +def disclose_histogram(source): source = replace( source, "plot_ae_error_distribution_logscale", @@ -370,7 +374,8 @@ def n06(s): ), True, ) - add("AD_HIST", "linear_histogram_truncation", joint, True) + add("AD_HIST", "linear_histogram_truncation", disclose_histogram, True) + add("AD_LOG", "log_histogram_keeps", disclose_histogram, True) add("JOINT", "", joint, True) return p @@ -422,6 +427,8 @@ def main(): ).strip(), "python": sys.version, "working_hashes": protected, + "proofs_ref": args.proofs_ref, + "runner_lf_sha256": runner.digest(Path(__file__)), "runs": [], } with tempfile.TemporaryDirectory(prefix="m28-review-synthetic-") as directory: @@ -516,9 +523,13 @@ def main(): json.dumps(ledger, indent=2, ensure_ascii=True) + "\n", encoding="utf-8" ) print(name, result, flush=True) - assert protected == { + ledger["protected_unchanged"] = protected == { p: runner.digest(ROOT / p) for p in protected - }, "Protected worktree inputs changed" + } + output.write_text( + json.dumps(ledger, indent=2, ensure_ascii=True) + "\n", encoding="utf-8" + ) + assert ledger["protected_unchanged"], "Protected worktree inputs changed" if __name__ == "__main__": diff --git a/audit/m28_review_controls_initial_results.json b/audit/m28_review_controls_initial_results.json new file mode 100644 index 0000000..231d7e0 --- /dev/null +++ b/audit/m28_review_controls_initial_results.json @@ -0,0 +1,15306 @@ +{ + "active_head": "4364c61f56d91f7ec93c5c6072b9f88c46023241", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "working_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7fd6d4164a9bd50a52e3a47e79eef197c7963dcc6cd5e96be4231383e7ca3a25", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3" + }, + "runs": [ + { + "name": "AD05", + "selection": "cluster_colorbar", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1420, + 1421, + 1422 + ], + [ + 1564, + 1565, + 1566 + ] + ], + "patch": "--- \n+++ \n@@ -1417,9 +1417,9 @@\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n- plt.colorbar(\n- sm, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n- ).ax.tick_params(labelsize=8)\n+ ax.legend(handles=[mpatches.Patch(color=color_map[c],label=f\"C{c}\") for c in cluster_ids])\n+ for annotation in list(ax.texts):\n+ annotation.remove()\n ax.text(\n 0.02,\n 0.98,\n@@ -1561,9 +1561,9 @@\n cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n )\n sm2.set_array([])\n- plt.colorbar(\n- sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n- ).ax.tick_params(labelsize=8)\n+ ax.legend(handles=[mpatches.Patch(color=color_map[c],label=f\"C{c}\") for c in cluster_ids])\n+ for annotation in list(ax.texts):\n+ annotation.remove()\n \n ax2 = axes[1]\n valid_teff = np.isfinite(teff)\n", + "candidate_sha256": "6b87a55bafb24be9782e14af82259b4b66f426cb9f4bcf689d5f08adc7fb82bb", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:211: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:211: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n2 failed, 84 deselected in 1.61s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n2 passed, 84 deselected in 1.18s\n", + "stderr": "" + } + }, + { + "name": "AC05", + "selection": "cluster_colorbar", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1415 + ], + [ + 1560 + ] + ], + "patch": "--- \n+++ \n@@ -1413,7 +1413,7 @@\n ),\n )\n sm = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n@@ -1558,7 +1558,7 @@\n )\n ax.grid(True, alpha=0.2)\n sm2 = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm2.set_array([])\n plt.colorbar(\n", + "candidate_sha256": "0ca8b2a77d45ca5e7e0c55444c021152cb005d5ef896b2725e86fabf00358c95", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:211: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:211: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n2 failed, 84 deselected in 1.40s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n2 passed, 84 deselected in 1.22s\n", + "stderr": "" + } + }, + { + "name": "FD02", + "selection": "hr_region_vertices", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 3206, + 3207 + ] + ], + "patch": "--- \n+++ \n@@ -3203,7 +3203,8 @@\n ax.invert_xaxis()\n ax.invert_yaxis()\n ax.set_xlim(T_HI + T_PAD * 5, T_LO - T_PAD * 5)\n- ax.set_ylim(G_HI + G_PAD * 5, G_LO - G_PAD * 5)\n+ _ys = [v[1] for r in REGIONS for v in r[\"poly\"]]\n+ ax.set_ylim(max(G_HI+G_PAD*5,max(_ys)),min(G_LO-G_PAD*5,min(_ys)))\n \n ax.xaxis.set_major_formatter(\n FuncFormatter(lambda x, _: f\"{int(x):,}\".replace(\",\", \"\\u202f\"))\n", + "candidate_sha256": "3b7b864ec4aca8ebe8af3fcb887b29c87e31fa8c150f1fa6654320fe9678d13f", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:152: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:152: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 85 deselected in 1.14s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:152: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3207, + 3209, + 3210, + 3212, + 3213, + 3214, + 3215, + 3217, + 3218, + 3220, + 3221, + 3223, + 3224 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:152: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 85 deselected in 1.13s\n", + "stderr": "" + } + }, + { + "name": "FD09", + "selection": "more_reconstructions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1179, + 1180 + ] + ], + "patch": "--- \n+++ \n@@ -1176,6 +1176,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in list(axes)[len(idx):]:\n+ unused.plot([],[])\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n", + "candidate_sha256": "4ea4c2c1cbbd94860f59f7598eb65acf8e60297e3c9467d5d4297b41a24cc57c", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:275: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1199, + 1200, + 1201, + 1202, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:275: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n1 failed, 85 deselected in 0.94s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:275: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 1 >= 2\nE + where 1 = len()\nE + where = .lines" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1180, + 1181, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1196, + 1197, + 1198, + 1201, + 1202, + 1203, + 1204, + 1206, + 1207, + 1208, + 1209, + 1210, + 1212, + 1213, + 1216, + 1218, + 1258, + 1263, + 1264, + 1265, + 1317, + 1354, + 1359, + 1473, + 1478, + 1599, + 1602, + 1603, + 1604, + 1641, + 1646, + 1774, + 1779, + 1780, + 1954, + 1958, + 1959, + 2005, + 2009, + 2010, + 2057, + 2064, + 2164, + 2168, + 2216, + 2221, + 2222, + 2223, + 2290, + 2295, + 2392, + 2397, + 2529, + 2535, + 2674, + 2679, + 2680, + 2803, + 2807, + 2865, + 2871, + 2872, + 2985, + 2988 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:275: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 1 >= 2\nE + where 1 = len()\nE + where = .lines\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n1 failed, 85 deselected in 0.96s\n", + "stderr": "" + } + }, + { + "name": "FD11", + "selection": "log_histogram_keeps", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2823 + ], + [ + 2834 + ] + ], + "patch": "--- \n+++ \n@@ -2821,7 +2821,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(vals.min()), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n@@ -2832,7 +2832,7 @@\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n ax.hist(\n- vals,\n+ vals[vals>=1e-4] if xscale==\"log\" else vals,\n bins=bins,\n alpha=0.55,\n color=color,\n", + "candidate_sha256": "5930c4566f006317d795d17c7abe043d19c32f3977f5b56b6ed5a0ca90ea9c53", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:326: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:326: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\n1 failed, 85 deselected in 1.35s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:325: in test_log_histogram_keeps_small_positive_errors\n missing, edges = visualizer_contracts.assert_histogram_population(call, errors)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests\\visualizer_review_contracts.py:130: in assert_histogram_population\n assert_array_equal(\nE AssertionError: \nE Arrays are not equal\nE Histogram omitted observations inside its own displayed support\nE Mismatched elements: 3 / 59 (5.08%)\nE Mismatch at indices:\nE [0]: 0 (ACTUAL), 1 (DESIRED)\nE [7]: 0 (ACTUAL), 1 (DESIRED)\nE [14]: 0 (ACTUAL), 1 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 1.\nE ACTUAL: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\nE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\nE 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])\nE DESIRED: array([1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\nE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\nE 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:325: in test_log_histogram_keeps_small_positive_errors\n missing, edges = visualizer_contracts.assert_histogram_population(call, errors)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests\\visualizer_review_contracts.py:130: in assert_histogram_population\n assert_array_equal(\nE AssertionError: \nE Arrays are not equal\nE Histogram omitted observations inside its own displayed support\nE Mismatched elements: 3 / 59 (5.08%)\nE Mismatch at indices:\nE [0]: 0 (ACTUAL), 1 (DESIRED)\nE [7]: 0 (ACTUAL), 1 (DESIRED)\nE [14]: 0 (ACTUAL), 1 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 1.\nE ACTUAL: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\nE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\nE 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])\nE DESIRED: array([1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\nE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\nE 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\n1 failed, 85 deselected in 1.45s\n", + "stderr": "" + } + }, + { + "name": "FD12", + "selection": "fifth_class", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1334, + 1335 + ] + ], + "patch": "--- \n+++ \n@@ -1331,6 +1331,8 @@\n )\n # M\u00e9diane trac\u00e9e pour robuste comparaison inter-classes.\n ax.axvline(np.median(vals), color=color, lw=2, ls=\"--\")\n+ for cls in classes[len(palette):]:\n+ ax.plot([],[],label=f\"{cls} (n={(y==cls).sum()})\")\n ax.set_xlabel(\"MSE de reconstruction\")\n ax.set_ylabel(\"Densit\u00e9\")\n ax.set_title(\"Distribution des erreurs de reconstruction par classe\")\n", + "candidate_sha256": "b37519ab25fa7ab3c9c4c6b3368adfb81196d35d6674894e44ebb03e95c431b8", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "fifth_class", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:347: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:347: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\n1 failed, 85 deselected in 1.06s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "fifth_class", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:349: in test_histogram_does_not_silently_omit_fifth_class\n assert len(calls) == 5, \"Legend-only classes are not histogram populations\"\nE AssertionError: Legend-only classes are not histogram populations\nE assert 4 == 5\nE + where 4 = len([{'ax': )\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1425/test_default_output_directory_0').glob" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:390: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1425/test_default_output_directory_0').glob\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\n1 failed, 85 deselected in 1.12s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_output_directory and plot_training_history", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:392: in test_default_output_directory_applies_to_direct_exports\n visualizer_contracts.assert_png_matches_figure(path, result[0], viz.dpi)\ntests\\visualizer_review_contracts.py:43: in assert_png_matches_figure\n actual.shape == expected.shape\nE AssertionError: Export geometry differs from the returned figure" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1092, + 1094, + 1167, + 1168, + 1218, + 1258, + 1263, + 1264, + 1265, + 1317, + 1354, + 1359, + 1473, + 1478, + 1599, + 1602, + 1603, + 1604, + 1641, + 1646, + 1774, + 1779, + 1780, + 1954, + 1958, + 1959, + 2005, + 2009, + 2010, + 2057, + 2064, + 2164, + 2168, + 2216, + 2221, + 2222, + 2223, + 2290, + 2295, + 2392, + 2397, + 2529, + 2535, + 2674, + 2679, + 2680, + 2803, + 2807, + 2865, + 2871, + 2872, + 2985, + 2988 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:392: in test_default_output_directory_applies_to_direct_exports\n visualizer_contracts.assert_png_matches_figure(path, result[0], viz.dpi)\ntests\\visualizer_review_contracts.py:43: in assert_png_matches_figure\n actual.shape == expected.shape\nE AssertionError: Export geometry differs from the returned figure\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\n1 failed, 85 deselected in 1.34s\n", + "stderr": "" + } + }, + { + "name": "FD03", + "selection": "hr_population_title", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 3213 + ] + ], + "patch": "--- \n+++ \n@@ -3212,7 +3212,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 N = 43 019\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "candidate_sha256": "fb5de2070d0e0c7185e14049a2b236d663fa37a2280b52e0eaa31560124954cc", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:167: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002CD0E9CAC00>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:167: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002CD50C28C80>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:167: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002CD0E9CAC00>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:167: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002CD50C28C80>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\n2 failed, 84 deselected in 1.29s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:167: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 N = 43 019\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000241D814EC00>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:167: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 N = 43 019\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002421A39E7A0>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:167: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 N = 43 019\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000241D814EC00>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:167: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 N = 43 019\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002421A39E7A0>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\n2 failed, 84 deselected in 1.28s\n", + "stderr": "" + } + }, + { + "name": "FD10", + "selection": "truncated_variance_annotation", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 185 + ] + ], + "patch": "--- \n+++ \n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"\u2192 {cumvar[idx]*100:.1f}% avec {n_thresh} PCs\",\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n", + "candidate_sha256": "ab46a5dc5c97949be4f23c049415f85d0382a5329b53ab18a21b04f448ec7484", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "truncated_variance_annotation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:309: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:309: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\n1 failed, 85 deselected in 0.88s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "truncated_variance_annotation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:309: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:309: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\n1 failed, 85 deselected in 0.88s\n", + "stderr": "" + } + }, + { + "name": "N01", + "selection": "xgboost_classes_confidence", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2076 + ] + ], + "patch": "--- \n+++ \n@@ -2081,7 +2081,7 @@\n alpha=0.55,\n linewidths=0,\n rasterized=True,\n- label=f\"{cls} (n={mask.sum()})\",\n+ label=f\"{classes_pred[(classes_pred.index(cls)+1)%len(classes_pred)]} (n={mask.sum()})\",\n )\n ax.legend(markerscale=4, fontsize=9, framealpha=0.9)\n ax.set_title(\"Pr\u00e9dictions XGBoost\", fontsize=12, fontweight=\"bold\")\n", + "candidate_sha256": "50853fb90afce1cf5e8b4cb4d8fca701b582b3dedb44bb9550aa5c455514ae8f", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n2 passed, 84 deselected in 1.02s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:507: in test_xgboost_classes_confidence_and_cluster_associations\n assert re.search(\nE AssertionError: Prediction label differs from its actual points\nE assert None\nE + where None = ('\\\\bF\\\\b', 'G (n=3)')\nE + where = .search\nE + and 'G (n=3)' = get_label()\nE + where get_label = .get_label" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:507: in test_xgboost_classes_confidence_and_cluster_associations\n assert re.search(\nE AssertionError: Prediction label differs from its actual points\nE assert None\nE + where None = ('\\\\bF\\\\b', 'G (n=3)')\nE + where = .search\nE + and 'G (n=3)' = get_label()\nE + where get_label = .get_label" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n_______ test_xgboost_classes_confidence_and_cluster_associations[None] ________\ntests\\test_dimred_visualizer.py:507: in test_xgboost_classes_confidence_and_cluster_associations\n assert re.search(\nE AssertionError: Prediction label differs from its actual points\nE assert None\nE + where None = ('\\\\bF\\\\b', 'G (n=3)')\nE + where = .search\nE + and 'G (n=3)' = get_label()\nE + where get_label = .get_label\n____ test_xgboost_classes_confidence_and_cluster_associations[confidence1] ____\ntests\\test_dimred_visualizer.py:507: in test_xgboost_classes_confidence_and_cluster_associations\n assert re.search(\nE AssertionError: Prediction label differs from its actual points\nE assert None\nE + where None = ('\\\\bF\\\\b', 'G (n=3)')\nE + where = .search\nE + and 'G (n=3)' = get_label()\nE + where get_label = .get_label\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_xgboost_classes_confidence_and_cluster_associations[None]\nFAILED tests/test_dimred_visualizer.py::test_xgboost_classes_confidence_and_cluster_associations[confidence1]\n2 failed, 84 deselected in 1.19s\n", + "stderr": "" + } + }, + { + "name": "N02", + "selection": "real_analyzer_state", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1445 + ] + ], + "patch": "--- \n+++ \n@@ -1449,7 +1449,7 @@\n marker=CLASS_MARKERS.get(cls, \"o\"),\n s=2,\n alpha=0.45,\n- label=f\"{cls} (n={mask.sum()})\",\n+ label=f\"{np.unique(y)[(list(np.unique(y)).index(cls)+1)%len(np.unique(y))]} (n={mask.sum()})\",\n rasterized=True,\n linewidths=0,\n )\n", + "candidate_sha256": "88d7e6f3129fd84d22c03d7ab14f92793c96b9580c2ac5937eba0efda98740a3", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n3 passed, 83 deselected in 1.14s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:402: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:402: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:402: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFF [100%]\n================================== FAILURES ===================================\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels0] _______\ntests\\test_dimred_visualizer.py:402: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels1] _______\ntests\\test_dimred_visualizer.py:402: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels2] _______\ntests\\test_dimred_visualizer.py:402: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels0]\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels1]\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels2]\n3 failed, 83 deselected in 1.39s\n", + "stderr": "" + } + }, + { + "name": "N04", + "selection": "synthesis_preserves", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2966 + ] + ], + "patch": "--- \n+++ \n@@ -2964,7 +2964,7 @@\n ax.set_xlabel(xlabel, fontsize=8)\n if col == 0:\n ax.set_ylabel(\n- f\"{method_name}\\n{ylabel}\", fontsize=9, fontweight=\"bold\"\n+ f\"{METHODS[-1-row][0]}\\n{ylabel}\", fontsize=9, fontweight=\"bold\"\n )\n else:\n ax.set_ylabel(ylabel, fontsize=8)\n", + "candidate_sha256": "582917faca6080dc0e4f1c28c85117c5c52d80e53223745247f2630bdb8eba88", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n2 passed, 84 deselected in 0.95s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:656: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert expected_name.casefold() in data_axes[row * 3].get_ylabel().casefold()\nE AssertionError: assert 'pca' in 'autoencodeur\\npc2'\nE + where 'pca' = ()\nE + where = 'PCA'.casefold\nE + and 'autoencodeur\\npc2' = ()\nE + where = 'Autoencodeur\\nPC2'.casefold\nE + where 'Autoencodeur\\nPC2' = get_ylabel()\nE + where get_ylabel = .get_ylabel" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:656: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert expected_name.casefold() in data_axes[row * 3].get_ylabel().casefold()\nE AssertionError: assert 'pca' in 'autoencodeur\\npc2'\nE + where 'pca' = ()\nE + where = 'PCA'.casefold\nE + and 'autoencodeur\\npc2' = ()\nE + where = 'Autoencodeur\\nPC2'.casefold\nE + where 'Autoencodeur\\nPC2' = get_ylabel()\nE + where get_ylabel = .get_ylabel" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[False] ___\ntests\\test_dimred_visualizer.py:656: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert expected_name.casefold() in data_axes[row * 3].get_ylabel().casefold()\nE AssertionError: assert 'pca' in 'autoencodeur\\npc2'\nE + where 'pca' = ()\nE + where = 'PCA'.casefold\nE + and 'autoencodeur\\npc2' = ()\nE + where = 'Autoencodeur\\nPC2'.casefold\nE + where 'Autoencodeur\\nPC2' = get_ylabel()\nE + where get_ylabel = .get_ylabel\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[True] ____\ntests\\test_dimred_visualizer.py:656: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert expected_name.casefold() in data_axes[row * 3].get_ylabel().casefold()\nE AssertionError: assert 'pca' in 'autoencodeur\\npc2'\nE + where 'pca' = ()\nE + where = 'PCA'.casefold\nE + and 'autoencodeur\\npc2' = ()\nE + where = 'Autoencodeur\\nPC2'.casefold\nE + where 'Autoencodeur\\nPC2' = get_ylabel()\nE + where get_ylabel = .get_ylabel\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]\n2 failed, 84 deselected in 1.16s\n", + "stderr": "" + } + }, + { + "name": "N10", + "selection": "real_sklearn_trustworthiness", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2236 + ] + ], + "patch": "--- \n+++ \n@@ -2233,7 +2233,7 @@\n idx = rng.choice(len(X_ref), size=n, replace=False)\n X_sub = X_ref[idx]\n Zu_sub = Z_umap[idx]\n- Zt_sub = Z_tsne[idx]\n+ Zt_sub = Z_tsne[np.roll(idx,1)]\n \n trust_u, trust_t = [], []\n for k in k_values:\n", + "candidate_sha256": "9a92851045aa8e4839b1923d4d613d9f6a4c578cca63944ccfd78d6874c17396", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n2 passed, 84 deselected in 2.58s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 24 / 24 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -0.13429338949088465 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 1.1776172821553483 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: 0.7540394717615756 (ACTUAL), -0.6451940968015629 (DESIRED)\nE [1, 1]: 1.9947886386434426 (ACTUAL), 0.0825255266666682 (DESIRED)\nE [2, 0]: -0.6451940968015629 (ACTUAL), -0.11873997633083841 (DESIRED)\nE Max absolute difference among violations: 3.0315093\nE Max relative difference among violations: 23.17177714\nE ACTUAL: array([[-0.134293, 1.177617],\nE [ 0.754039, 1.994789],\nE [-0.645194, 0.082526],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-0.645194, 0.082526],\nE [-0.11874 , -1.400206],..." + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 18 / 18 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: 0.21879687040848914 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: -1.1148814736874748 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: 0.7540394717615756 (ACTUAL), -1.0861640144823521 (DESIRED)\nE [1, 1]: 1.9947886386434426 (ACTUAL), -0.5693158913378338 (DESIRED)\nE [2, 0]: -1.0861640144823521 (ACTUAL), -1.215555026777933 (DESIRED)\nE Max absolute difference among violations: 3.10967011\nE Max relative difference among violations: 6.97417863\nE ACTUAL: array([[ 0.218797, -1.114881],\nE [ 0.754039, 1.994789],\nE [-1.086164, -0.569316],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-1.086164, -0.569316],\nE [-1.215555, 0.138822],..." + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[12] ________\ntests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 24 / 24 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -0.13429338949088465 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 1.1776172821553483 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: 0.7540394717615756 (ACTUAL), -0.6451940968015629 (DESIRED)\nE [1, 1]: 1.9947886386434426 (ACTUAL), 0.0825255266666682 (DESIRED)\nE [2, 0]: -0.6451940968015629 (ACTUAL), -0.11873997633083841 (DESIRED)\nE Max absolute difference among violations: 3.0315093\nE Max relative difference among violations: 23.17177714\nE ACTUAL: array([[-0.134293, 1.177617],\nE [ 0.754039, 1.994789],\nE [-0.645194, 0.082526],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-0.645194, 0.082526],\nE [-0.11874 , -1.400206],...\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[9] _________\ntests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 18 / 18 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: 0.21879687040848914 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: -1.1148814736874748 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: 0.7540394717615756 (ACTUAL), -1.0861640144823521 (DESIRED)\nE [1, 1]: 1.9947886386434426 (ACTUAL), -0.5693158913378338 (DESIRED)\nE [2, 0]: -1.0861640144823521 (ACTUAL), -1.215555026777933 (DESIRED)\nE Max absolute difference among violations: 3.10967011\nE Max relative difference among violations: 6.97417863\nE ACTUAL: array([[ 0.218797, -1.114881],\nE [ 0.754039, 1.994789],\nE [-1.086164, -0.569316],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-1.086164, -0.569316],\nE [-1.215555, 0.138822],...\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[12]\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[9]\n2 failed, 84 deselected in 3.31s\n", + "stderr": "" + } + }, + { + "name": "N05", + "selection": "interpolation_actual", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1278, + 1279 + ] + ], + "patch": "--- \n+++ \n@@ -1275,8 +1275,8 @@\n ax.plot(\n Z_interp[:, 0], Z_interp[:, 1], color=\"gray\", lw=1.5, zorder=2, alpha=0.6\n )\n- ax.scatter(*Z_interp[0], s=120, c=\"blue\", zorder=4, marker=\"*\", label=label_a)\n- ax.scatter(*Z_interp[-1], s=120, c=\"red\", zorder=4, marker=\"*\", label=label_b)\n+ ax.scatter(*Z_interp[0], s=120, c=\"blue\", zorder=4, marker=\"*\", label=(label_b))\n+ ax.scatter(*Z_interp[-1], s=120, c=\"red\", zorder=4, marker=\"*\", label=label_a)\n plt.colorbar(sc, ax=ax, label=\"\u03b1 (interpolation)\")\n ax.set_xlabel(\"Latent axe 1\")\n ax.set_ylabel(\"Latent axe 2\")\n", + "candidate_sha256": "13917cb73aeae55c591400ff03d4efccc14cb00db98ff3d27b4b51dcae35f4b0", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "interpolation_actual", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n1 passed, 85 deselected in 0.79s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "interpolation_actual", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:289: in test_interpolation_actual_path_feature_order_and_endpoints\n assert axes[0].collections[1].get_label() == \"A\"\nE AssertionError: assert 'B' == 'A'\nE \nE - A\nE + B" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_________ test_interpolation_actual_path_feature_order_and_endpoints __________\ntests\\test_dimred_visualizer.py:289: in test_interpolation_actual_path_feature_order_and_endpoints\n assert axes[0].collections[1].get_label() == \"A\"\nE AssertionError: assert 'B' == 'A'\nE \nE - A\nE + B\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_interpolation_actual_path_feature_order_and_endpoints\n1 failed, 85 deselected in 0.93s\n", + "stderr": "" + } + }, + { + "name": "N06", + "selection": "family_weights_bar", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 369 + ], + [ + 379 + ] + ], + "patch": "--- \n+++ \n@@ -374,7 +374,7 @@\n alpha=0.92,\n edgecolor=\"white\",\n linewidth=0.5,\n- label=\"PC1\",\n+ label=(\"PC2\"),\n )\n ax.bar(\n x + w / 2,\n@@ -384,7 +384,7 @@\n alpha=0.55,\n edgecolor=\"white\",\n linewidth=0.5,\n- label=\"PC2\",\n+ label=\"PC1\",\n hatch=\"//\",\n )\n # Lecture visuelle: opaque = PC1, hachur\u00e9/translucide = PC2.\n", + "candidate_sha256": "aab9151c32a9184032f1d5cb8092e7e951262c5c208f6af603017ab2a386df19", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "family_weights_bar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n1 passed, 85 deselected in 0.75s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "family_weights_bar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:172: in test_family_weights_bar_and_donut_angles\n assert_allclose([p.get_height() for p in series[\"PC1\"]], [80, 20, 0])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.0 (ACTUAL), 80 (DESIRED)\nE [1]: 30.0 (ACTUAL), 20 (DESIRED)\nE [2]: 70.0 (ACTUAL), 0 (DESIRED)\nE Max absolute difference among violations: 80.\nE Max relative difference among violations: 1.\nE ACTUAL: array([ 0., 30., 70.])\nE DESIRED: array([80, 20, 0])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n__________________ test_family_weights_bar_and_donut_angles ___________________\ntests\\test_dimred_visualizer.py:172: in test_family_weights_bar_and_donut_angles\n assert_allclose([p.get_height() for p in series[\"PC1\"]], [80, 20, 0])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.0 (ACTUAL), 80 (DESIRED)\nE [1]: 30.0 (ACTUAL), 20 (DESIRED)\nE [2]: 70.0 (ACTUAL), 0 (DESIRED)\nE Max absolute difference among violations: 80.\nE Max relative difference among violations: 1.\nE ACTUAL: array([ 0., 30., 70.])\nE DESIRED: array([80, 20, 0])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_family_weights_bar_and_donut_angles\n1 failed, 85 deselected in 0.84s\n", + "stderr": "" + } + }, + { + "name": "N03", + "selection": "real_export_readable", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024 + ] + ], + "patch": "--- \n+++ \n@@ -1015,7 +1015,13 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ import pickle\n+ clone=pickle.loads(pickle.dumps(fig))\n+ for axis in clone.axes:\n+ for collection in list(axis.collections):\n+ collection.remove()\n+ clone.savefig(path,bbox_inches=\"tight\",dpi=self.dpi)\n+ plt.close(clone)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n", + "candidate_sha256": "fc72e8f8514911cc968fd57dee9b6fb78846d55c43c6ac4763aa2c96a77b1421", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n2 passed, 84 deselected in 1.17s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:681: in test_real_export_readable_and_same_semantic_figure\n visualizer_contracts.assert_png_matches_figure(path, fig, c.viz.dpi)\ntests\\visualizer_review_contracts.py:45: in assert_png_matches_figure\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=1\nE Exported scientific artists differ from the returned figure\nE Mismatched elements: 162 / 312700 (0.0518%)\nE First 5 mismatches are at indices:\nE [28, 127, 0]: 255 (ACTUAL), 250 (DESIRED)\nE [28, 127, 1]: 255 (ACTUAL), 251 (DESIRED)\nE [28, 127, 2]: 255 (ACTUAL), 252 (DESIRED)\nE [28, 128, 0]: 255 (ACTUAL), 214 (DESIRED)\nE [28, 128, 1]: 255 (ACTUAL), 223 (DESIRED)\nE Max absolute difference among violations: 125\nE Max relative difference among violations: 0.96153846\nE ACTUAL: array([[[255, 255, 255, 255],\nE [255, 255, 255, 255],\nE [255, 255, 255, 255],...\nE DESIRED: array([[[255, 255, 255, 255],\nE [255, 255, 255, 255],\nE [255, 255, 255, 255],..." + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024, + 1025, + 1031, + 1098, + 1171, + 1172, + 1222, + 1262, + 1267, + 1268, + 1269, + 1321, + 1358, + 1363, + 1477, + 1482, + 1603, + 1606, + 1607, + 1608, + 1645, + 1650, + 1778, + 1783, + 1784, + 1958, + 1962, + 1963, + 2009, + 2013, + 2014, + 2061, + 2068, + 2168, + 2172, + 2220, + 2225, + 2226, + 2227, + 2294, + 2299, + 2396, + 2401, + 2533, + 2539, + 2678, + 2683, + 2684, + 2807, + 2811, + 2869, + 2875, + 2876, + 2989, + 2992 + ], + "stdout": "F. [100%]\n================================== FAILURES ===================================\n___________ test_real_export_readable_and_same_semantic_figure[png] ___________\ntests\\test_dimred_visualizer.py:681: in test_real_export_readable_and_same_semantic_figure\n visualizer_contracts.assert_png_matches_figure(path, fig, c.viz.dpi)\ntests\\visualizer_review_contracts.py:45: in assert_png_matches_figure\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=1\nE Exported scientific artists differ from the returned figure\nE Mismatched elements: 162 / 312700 (0.0518%)\nE First 5 mismatches are at indices:\nE [28, 127, 0]: 255 (ACTUAL), 250 (DESIRED)\nE [28, 127, 1]: 255 (ACTUAL), 251 (DESIRED)\nE [28, 127, 2]: 255 (ACTUAL), 252 (DESIRED)\nE [28, 128, 0]: 255 (ACTUAL), 214 (DESIRED)\nE [28, 128, 1]: 255 (ACTUAL), 223 (DESIRED)\nE Max absolute difference among violations: 125\nE Max relative difference among violations: 0.96153846\nE ACTUAL: array([[[255, 255, 255, 255],\nE [255, 255, 255, 255],\nE [255, 255, 255, 255],...\nE DESIRED: array([[[255, 255, 255, 255],\nE [255, 255, 255, 255],\nE [255, 255, 255, 255],...\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_export_readable_and_same_semantic_figure[png]\n1 failed, 1 passed, 84 deselected in 1.39s\n", + "stderr": "" + } + }, + { + "name": "A_TRUST", + "selection": "real_sklearn_trustworthiness", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2233 + ] + ], + "patch": "--- \n+++ \n@@ -2230,7 +2230,7 @@\n rng = np.random.default_rng(42)\n n = min(n_subsample, len(X_ref))\n # Sous-\u00e9chantillonnage pour ma\u00eetriser le co\u00fbt de calcul T(k).\n- idx = rng.choice(len(X_ref), size=n, replace=False)\n+ idx = np.sort(rng.permutation(len(X_ref))[:n])\n X_sub = X_ref[idx]\n Zu_sub = Z_umap[idx]\n Zt_sub = Z_tsne[idx]\n", + "candidate_sha256": "fcc67a8362f6f40330e5d109e8e0851d1fe3ef3870d3986f40d225d1bf91f9c2", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n2 passed, 84 deselected in 2.83s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n2 passed, 84 deselected in 2.79s\n", + "stderr": "" + } + }, + { + "name": "AD14", + "selection": "trustworthiness_axis_contains", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2279, + 2280 + ] + ], + "patch": "--- \n+++ \n@@ -2276,7 +2276,8 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0.75,1.01)\n+ ax.text(.1,.1,f\"T(k) < 0.75 hors champ : min = {min(trust_t):.3f}\",transform=ax.transAxes)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n", + "candidate_sha256": "b226e92e6afab749ae6ab91b70733b47ccaf8995f634945d03935428180aa4ba", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:403: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:196: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:403: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:196: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\n1 failed, 85 deselected in 2.68s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2285, + 2289, + 2294, + 2391, + 2396, + 2528, + 2534, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n1 passed, 85 deselected in 2.37s\n", + "stderr": "" + } + }, + { + "name": "A_EXPORT", + "selection": "default_output_directory or real_export_readable", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1087 + ], + [ + 1249 + ] + ], + "patch": "--- \n+++ \n@@ -1084,9 +1084,7 @@\n \"Autoencodeur \u2014 Historique d'entra\u00eenement (LAMOST DR5)\", fontsize=13, y=1.02\n )\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_training_history\")\n return fig, axes\n \n def plot_ae_embedding(self, Z, meta, y, save_path=None):\n@@ -1248,9 +1246,7 @@\n ax.legend(fontsize=9)\n ax.grid(True, alpha=0.3)\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_ae_vs_pca\")\n return fig, ax\n \n def plot_latent_interpolation(\n", + "candidate_sha256": "03cd6fc36c4863b2d546a7b7a0986741434046b13d54c198a9eca3cf45e23b75", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_output_directory or real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:390: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1429/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:390: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1429/test_default_output_directory_1').glob" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1165, + 1166, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "..FF [100%]\n================================== FAILURES ===================================\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:390: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1429/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:390: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1429/test_default_output_directory_1').glob\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\n2 failed, 2 passed, 82 deselected in 1.88s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_output_directory or real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1010, + 1012, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1088, + 1090, + 1163, + 1164, + 1214, + 1216, + 1218, + 1219, + 1221, + 1222, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1231, + 1233, + 1234, + 1236, + 1238, + 1239, + 1240, + 1241, + 1243, + 1244, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1252, + 1257, + 1258, + 1259, + 1311, + 1348, + 1353, + 1467, + 1472, + 1593, + 1596, + 1597, + 1598, + 1635, + 1640, + 1768, + 1773, + 1774, + 1948, + 1952, + 1953, + 1999, + 2003, + 2004, + 2051, + 2058, + 2158, + 2162, + 2210, + 2215, + 2216, + 2217, + 2284, + 2289, + 2386, + 2391, + 2523, + 2529, + 2668, + 2673, + 2674, + 2797, + 2801, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n4 passed, 82 deselected in 2.56s\n", + "stderr": "" + } + }, + { + "name": "JOINT", + "selection": "", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 154 + ], + [ + 185 + ], + [ + 288 + ], + [ + 869 + ], + [ + 1018 + ], + [ + 1087 + ], + [ + 1110 + ], + [ + 1178, + 1179 + ], + [ + 1252 + ], + [ + 1319 + ], + [ + 1414 + ], + [ + 1559 + ], + [ + 2019 + ], + [ + 2040 + ], + [ + 2068 + ], + [ + 2278 + ], + [ + 2320 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2527, + 2528 + ], + [ + 2816 + ], + [ + 2827, + 2828, + 2829 + ], + [ + 3035 + ], + [ + 3209 + ] + ], + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, 100 * ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"{n_thresh} PCs\\n\u2192 {pca_analyzer.explained_variance_ratio[:n_thresh].sum()*100:.1f}%\",\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n@@ -285,7 +285,7 @@\n df = df.sort_values(\"loading\")\n \n # Couleur encodant le signe physique de la contribution.\n- colors = [\"#DD8452\" if v < 0 else \"#4C72B0\" for v in df[\"loading\"]]\n+ colors = [\"#CC5500\" if v < 0 else \"#0055CC\" for v in df[\"loading\"]]\n fig, ax = plt.subplots(figsize=(8, max(4, n_top * 0.35)), dpi=self.dpi)\n \n ax.barh(\n@@ -869,7 +869,7 @@\n ax.text(\n lam,\n ymax * 0.88,\n- nom,\n+ nom.replace(chr(92)*2, chr(92)),\n rotation=90,\n fontsize=6,\n color=\"crimson\",\n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ fig.canvas.print_figure(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n@@ -1084,9 +1084,7 @@\n \"Autoencodeur \u2014 Historique d'entra\u00eenement (LAMOST DR5)\", fontsize=13, y=1.02\n )\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_training_history\")\n return fig, axes\n \n def plot_ae_embedding(self, Z, meta, y, save_path=None):\n@@ -1109,6 +1107,7 @@\n \n PALETTE = {\"STAR\": \"#4C72B0\", \"GALAXY\": \"#DD8452\", \"QSO\": \"#55A868\"}\n MARKERS = {\"STAR\": \"o\", \"GALAXY\": \"s\", \"QSO\": \"^\"}\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -1176,6 +1175,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in axes[len(idx):]:\n+ unused.set_visible(False)\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n@@ -1248,9 +1249,7 @@\n ax.legend(fontsize=9)\n ax.grid(True, alpha=0.3)\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_ae_vs_pca\")\n return fig, ax\n \n def plot_latent_interpolation(\n@@ -1317,7 +1316,7 @@\n classes = np.unique(y)\n palette = [\"#4C72B0\", \"#DD8452\", \"#55A868\", \"#C44E52\"]\n fig, ax = plt.subplots(figsize=(9, 5), dpi=self.dpi)\n- for cls, color in zip(classes, palette):\n+ for cls, color in zip(classes, palette*((len(classes)+len(palette)-1)//len(palette))):\n mask = y == cls\n vals = mse_per_sample[mask]\n # Histogrammes normalis\u00e9s pour comparer les formes de distribution.\n@@ -1413,7 +1412,7 @@\n ),\n )\n sm = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n@@ -1558,7 +1557,7 @@\n )\n ax.grid(True, alpha=0.2)\n sm2 = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm2.set_array([])\n plt.colorbar(\n@@ -2017,7 +2016,7 @@\n ncols = 4\n nrows = (n_show + ncols - 1) // ncols\n fig, axes = plt.subplots(nrows, ncols, figsize=(5 * ncols, 4 * nrows), dpi=120)\n- axes_flat = axes.flatten() if n_show > 1 else [axes]\n+ axes_flat = np.asarray(axes).ravel()\n \n for ax_i, cid in zip(axes_flat, top_cids):\n profile = cluster_means.loc[cid]\n@@ -2038,7 +2037,7 @@\n ax_i.set_xlabel(\"Score moyen (\u03c3)\", fontsize=8)\n ax_i.grid(axis=\"x\", alpha=0.3)\n ax_i.set_xlim(-3, 3)\n- for ax_i in axes_flat[n_show:]:\n+ for ax_i in axes_flat[len(top_cids):]:\n ax_i.axis(\"off\")\n fig.suptitle(\n \"Top-5 features caract\u00e9ristiques par cluster HDBSCAN\\n\"\n@@ -2066,7 +2065,7 @@\n \n # V\u00e9rifie si une vraie probabilit\u00e9 est disponible.\n classes_pred = sorted(set(y_pred))\n- has_proba = confidence is not None and not np.all(confidence == 1.0)\n+ has_proba = confidence is not None\n fig, axes = plt.subplots(1, 3, figsize=(22, 8), dpi=self.dpi)\n \n ax = axes[0]\n@@ -2276,7 +2275,7 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0, 1.01)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n@@ -2318,6 +2317,7 @@\n ]\n \n fig, axes = plt.subplots(1, 1 + len(available), figsize=(22, 5), dpi=self.dpi)\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -2430,24 +2430,15 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2533,6 +2524,8 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ if not (len(X) == len(X_recon) == len(spectral_types)):\n+ raise RuntimeError(\"Observation alignment: incompatible lengths\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n@@ -2821,7 +2814,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(max(vals.min(), np.finfo(float).tiny)), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n@@ -2831,6 +2824,9 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls}: excluded {missing} of {len(vals)} outside support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n@@ -3054,7 +3050,7 @@\n MS_G_HOT + (MS_G_COOL - MS_G_HOT) * 0.35,\n ),\n (T_LO + (T_HI - T_LO) * 0.25, MS_G_COOL - 0.10),\n- (T_LO + T_PAD, G_HI - T_PAD * 2),\n+ (T_LO + T_PAD, G_HI - G_PAD * 2),\n (T_LO + T_PAD, G_HI - G_PAD),\n (T_LO + (T_HI - T_LO) * 0.20, MS_G_COOL + MS_W * 0.6),\n (\n@@ -3212,7 +3208,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 population fournie\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "candidate_sha256": "42b1023a70737c96ffd0049db6869f4980138caa0e0b6dea0501a483c5ebe1b0", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:152: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:167: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001F92FB42500>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:167: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001F92D597840>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:187: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:221: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000001F92D861540>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:233: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:236: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:234: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:236: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:254: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:262: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:275: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:309: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:326: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]))\nE + where = .exclusion_report" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:347: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:390: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1431/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:390: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1431/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:403: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:196: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:415: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:420: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:441: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "............................................................FFFFFFFFFFFF [ 83%]\nFFF.FFFFFFFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:152: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:167: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001F92FB42500>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:167: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001F92D597840>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:187: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:211: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:211: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:221: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000001F92D861540>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:233: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:236: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:234: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:236: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:254: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:262: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:275: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:309: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:326: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]))\nE + where = .exclusion_report\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:347: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:390: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1431/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:390: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1431/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:403: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:196: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:415: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:420: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:441: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n25 failed, 61 passed in 37.76s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1090, + 1092, + 1095, + 1096, + 1097, + 1098, + 1099, + 1102, + 1104, + 1105, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1126, + 1127, + 1128, + 1129, + 1131, + 1132, + 1133, + 1135, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1149, + 1150, + 1151, + 1153, + 1154, + 1155, + 1156, + 1158, + 1159, + 1162, + 1164, + 1165, + 1169, + 1171, + 1172, + 1173, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1195, + 1196, + 1197, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1211, + 1212, + 1215, + 1217, + 1219, + 1221, + 1222, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1232, + 1234, + 1236, + 1237, + 1239, + 1241, + 1242, + 1243, + 1244, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1252, + 1253, + 1255, + 1260, + 1261, + 1262, + 1266, + 1267, + 1268, + 1269, + 1271, + 1272, + 1274, + 1275, + 1277, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1285, + 1287, + 1288, + 1289, + 1291, + 1292, + 1293, + 1294, + 1295, + 1296, + 1298, + 1299, + 1300, + 1302, + 1303, + 1304, + 1305, + 1306, + 1308, + 1309, + 1312, + 1314, + 1316, + 1317, + 1318, + 1319, + 1320, + 1321, + 1323, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1332, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1343, + 1351, + 1356, + 1359, + 1360, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1371, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1386, + 1387, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1414, + 1415, + 1417, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1426, + 1427, + 1428, + 1429, + 1430, + 1432, + 1433, + 1434, + 1435, + 1437, + 1440, + 1441, + 1442, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1455, + 1456, + 1457, + 1458, + 1460, + 1461, + 1462, + 1463, + 1464, + 1466, + 1467, + 1468, + 1470, + 1475, + 1478, + 1481, + 1482, + 1483, + 1484, + 1485, + 1487, + 1488, + 1489, + 1490, + 1493, + 1494, + 1495, + 1498, + 1499, + 1501, + 1502, + 1504, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1516, + 1517, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1529, + 1530, + 1531, + 1532, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1558, + 1559, + 1560, + 1562, + 1563, + 1564, + 1565, + 1567, + 1568, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1582, + 1583, + 1584, + 1585, + 1587, + 1588, + 1589, + 1590, + 1592, + 1593, + 1594, + 1596, + 1599, + 1600, + 1601, + 1604, + 1605, + 1607, + 1608, + 1609, + 1612, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1620, + 1621, + 1622, + 1623, + 1624, + 1625, + 1627, + 1628, + 1629, + 1630, + 1631, + 1633, + 1634, + 1635, + 1636, + 1638, + 1643, + 1647, + 1648, + 1649, + 1650, + 1651, + 1652, + 1654, + 1655, + 1656, + 1657, + 1658, + 1660, + 1662, + 1664, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1675, + 1676, + 1678, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1690, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1703, + 1704, + 1705, + 1706, + 1707, + 1709, + 1711, + 1712, + 1714, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1724, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1736, + 1752, + 1753, + 1754, + 1755, + 1756, + 1757, + 1759, + 1761, + 1762, + 1763, + 1764, + 1765, + 1767, + 1768, + 1769, + 1771, + 1776, + 1777, + 1790, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1798, + 1799, + 1800, + 1801, + 1802, + 1803, + 1806, + 1808, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1819, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1832, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1845, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1854, + 1855, + 1856, + 1857, + 1860, + 1861, + 1862, + 1865, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1875, + 1876, + 1877, + 1879, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1890, + 1911, + 1912, + 1915, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1925, + 1927, + 1928, + 1931, + 1932, + 1933, + 1934, + 1935, + 1936, + 1938, + 1939, + 1940, + 1941, + 1942, + 1943, + 1945, + 1946, + 1947, + 1949, + 1951, + 1955, + 1956, + 1960, + 1961, + 1962, + 1963, + 1965, + 1966, + 1967, + 1969, + 1970, + 1972, + 1973, + 1974, + 1975, + 1976, + 1978, + 1979, + 1980, + 1982, + 1983, + 1984, + 1986, + 1987, + 1988, + 1989, + 1991, + 1992, + 1993, + 1995, + 1996, + 1998, + 1999, + 2000, + 2002, + 2006, + 2007, + 2011, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2021, + 2022, + 2024, + 2025, + 2026, + 2027, + 2028, + 2029, + 2031, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2045, + 2046, + 2048, + 2049, + 2050, + 2054, + 2061, + 2064, + 2067, + 2068, + 2069, + 2071, + 2072, + 2073, + 2075, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2085, + 2086, + 2087, + 2088, + 2089, + 2091, + 2092, + 2094, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2106, + 2107, + 2109, + 2112, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2121, + 2122, + 2124, + 2125, + 2127, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2136, + 2137, + 2139, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2148, + 2149, + 2150, + 2152, + 2153, + 2154, + 2155, + 2157, + 2158, + 2159, + 2161, + 2165, + 2169, + 2170, + 2171, + 2172, + 2174, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2185, + 2186, + 2188, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2198, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2206, + 2207, + 2208, + 2209, + 2213, + 2218, + 2219, + 2220, + 2223, + 2224, + 2226, + 2229, + 2230, + 2232, + 2233, + 2234, + 2235, + 2237, + 2238, + 2240, + 2241, + 2242, + 2243, + 2245, + 2246, + 2247, + 2249, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2259, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2268, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2278, + 2279, + 2280, + 2281, + 2282, + 2283, + 2287, + 2292, + 2296, + 2297, + 2298, + 2299, + 2301, + 2302, + 2303, + 2304, + 2305, + 2307, + 2308, + 2313, + 2314, + 2315, + 2316, + 2319, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2527, + 2528, + 2529, + 2543, + 2557, + 2558, + 2559, + 2560, + 2563, + 2564, + 2566, + 2567, + 2568, + 2569, + 2570, + 2571, + 2572, + 2574, + 2576, + 2577, + 2578, + 2581, + 2582, + 2591, + 2592, + 2593, + 2595, + 2596, + 2598, + 2602, + 2603, + 2604, + 2605, + 2606, + 2608, + 2611, + 2612, + 2614, + 2615, + 2616, + 2617, + 2618, + 2619, + 2620, + 2621, + 2622, + 2623, + 2624, + 2625, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2633, + 2634, + 2635, + 2637, + 2639, + 2640, + 2641, + 2642, + 2643, + 2644, + 2645, + 2646, + 2647, + 2649, + 2650, + 2651, + 2652, + 2654, + 2655, + 2657, + 2658, + 2659, + 2661, + 2662, + 2663, + 2665, + 2670, + 2671, + 2674, + 2675, + 2678, + 2679, + 2680, + 2711, + 2712, + 2715, + 2717, + 2718, + 2719, + 2720, + 2724, + 2725, + 2726, + 2727, + 2728, + 2729, + 2733, + 2734, + 2735, + 2736, + 2737, + 2738, + 2741, + 2742, + 2743, + 2744, + 2745, + 2746, + 2747, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2771, + 2772, + 2774, + 2775, + 2777, + 2778, + 2779, + 2780, + 2781, + 2782, + 2783, + 2785, + 2786, + 2787, + 2788, + 2790, + 2791, + 2792, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2859, + 2865, + 2866, + 2869, + 2871, + 2872, + 2873, + 2874, + 2875, + 2877, + 2879, + 2880, + 2882, + 2883, + 2885, + 2891, + 2892, + 2893, + 2894, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2906, + 2907, + 2908, + 2909, + 2911, + 2912, + 2913, + 2914, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2924, + 2926, + 2928, + 2930, + 2931, + 2932, + 2942, + 2943, + 2944, + 2945, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2954, + 2955, + 2956, + 2957, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2966, + 2967, + 2968, + 2970, + 2971, + 2973, + 2974, + 2976, + 2977, + 2979, + 2982, + 2995, + 2996, + 2997, + 2999, + 3000, + 3001, + 3002, + 3004, + 3005, + 3006, + 3011, + 3012, + 3013, + 3014, + 3016, + 3017, + 3026, + 3027, + 3028, + 3031, + 3034, + 3035, + 3037, + 3038, + 3039, + 3040, + 3041, + 3042, + 3043, + 3044, + 3046, + 3047, + 3048, + 3049, + 3050, + 3052, + 3053, + 3054, + 3055, + 3056, + 3057, + 3058, + 3060, + 3064, + 3065, + 3066, + 3067, + 3068, + 3069, + 3070, + 3071, + 3073, + 3074, + 3075, + 3076, + 3077, + 3078, + 3082, + 3083, + 3084, + 3085, + 3086, + 3087, + 3088, + 3089, + 3091, + 3092, + 3093, + 3094, + 3095, + 3096, + 3097, + 3101, + 3102, + 3103, + 3104, + 3105, + 3106, + 3107, + 3108, + 3110, + 3111, + 3112, + 3113, + 3114, + 3115, + 3116, + 3122, + 3125, + 3138, + 3139, + 3140, + 3141, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3151, + 3152, + 3153, + 3156, + 3157, + 3158, + 3159, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3167, + 3168, + 3169, + 3170, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3184, + 3185, + 3186, + 3187, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3199, + 3200, + 3201, + 3202, + 3204, + 3205, + 3207, + 3208, + 3209, + 3210, + 3212, + 3213, + 3215, + 3216, + 3218, + 3219 + ], + "stdout": "........................................................................ [ 83%]\n.............. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-vurzdt6s\\result.xml -\n86 passed in 44.19s\n", + "stderr": "" + } + } + ], + "executed_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7fd6d4164a9bd50a52e3a47e79eef197c7963dcc6cd5e96be4231383e7ca3a25", + "tests/proofs_dimred_visualizer.py": "2977b9033b086f26b611f8e3e3d1f8357fd8846142ad39c1be7d0b512bff9e4e", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3" + } +} diff --git a/audit/m28_review_discrimination_final_results.json b/audit/m28_review_discrimination_final_results.json new file mode 100644 index 0000000..0155876 --- /dev/null +++ b/audit/m28_review_discrimination_final_results.json @@ -0,0 +1,11779 @@ +{ + "active_head": "0c06cfd497579c5f99fd957c97ca28a052494bd4", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "working_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/proofs_dimred_visualizer.py": "6fd1f1ed7d1cc5202f8835b3e32ab838d5c9df05754e11d524af05c744f1fbd3", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3" + }, + "runs": [ + { + "name": "AD05", + "selection": "cluster_colorbar", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1420, + 1421, + 1422 + ], + [ + 1564, + 1565, + 1566 + ] + ], + "patch": "--- \n+++ \n@@ -1417,9 +1417,9 @@\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n- plt.colorbar(\n- sm, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n- ).ax.tick_params(labelsize=8)\n+ ax.legend(handles=[mpatches.Patch(color=color_map[c],label=f\"C{c}\") for c in cluster_ids])\n+ for annotation in list(ax.texts):\n+ annotation.remove()\n ax.text(\n 0.02,\n 0.98,\n@@ -1561,9 +1561,9 @@\n cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n )\n sm2.set_array([])\n- plt.colorbar(\n- sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n- ).ax.tick_params(labelsize=8)\n+ ax.legend(handles=[mpatches.Patch(color=color_map[c],label=f\"C{c}\") for c in cluster_ids])\n+ for annotation in list(ax.texts):\n+ annotation.remove()\n \n ax2 = axes[1]\n valid_teff = np.isfinite(teff)\n", + "candidate_sha256": "6b87a55bafb24be9782e14af82259b4b66f426cb9f4bcf689d5f08adc7fb82bb", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n2 failed, 84 deselected in 1.71s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n2 passed, 84 deselected in 1.22s\n", + "stderr": "" + } + }, + { + "name": "AC05", + "selection": "cluster_colorbar", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1415 + ], + [ + 1560 + ] + ], + "patch": "--- \n+++ \n@@ -1413,7 +1413,7 @@\n ),\n )\n sm = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n@@ -1558,7 +1558,7 @@\n )\n ax.grid(True, alpha=0.2)\n sm2 = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm2.set_array([])\n plt.colorbar(\n", + "candidate_sha256": "0ca8b2a77d45ca5e7e0c55444c021152cb005d5ef896b2725e86fabf00358c95", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n2 failed, 84 deselected in 1.44s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n2 passed, 84 deselected in 1.26s\n", + "stderr": "" + } + }, + { + "name": "FD02", + "selection": "hr_region_vertices", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 3206, + 3207 + ] + ], + "patch": "--- \n+++ \n@@ -3203,7 +3203,8 @@\n ax.invert_xaxis()\n ax.invert_yaxis()\n ax.set_xlim(T_HI + T_PAD * 5, T_LO - T_PAD * 5)\n- ax.set_ylim(G_HI + G_PAD * 5, G_LO - G_PAD * 5)\n+ _ys = [v[1] for r in REGIONS for v in r[\"poly\"]]\n+ ax.set_ylim(max(G_HI+G_PAD*5,max(_ys)),min(G_LO-G_PAD*5,min(_ys)))\n \n ax.xaxis.set_major_formatter(\n FuncFormatter(lambda x, _: f\"{int(x):,}\".replace(\",\", \"\\u202f\"))\n", + "candidate_sha256": "3b7b864ec4aca8ebe8af3fcb887b29c87e31fa8c150f1fa6654320fe9678d13f", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982, + 2995, + 2996, + 2997, + 2999, + 3000, + 3004, + 3005, + 3006, + 3011, + 3012, + 3013, + 3014, + 3016, + 3017, + 3026, + 3027, + 3028, + 3031, + 3034, + 3035, + 3037, + 3038, + 3039, + 3040, + 3041, + 3042, + 3043, + 3044, + 3046, + 3047, + 3048, + 3049, + 3050, + 3052, + 3053, + 3054, + 3055, + 3056, + 3057, + 3058, + 3060, + 3064, + 3065, + 3066, + 3067, + 3068, + 3069, + 3070, + 3071, + 3073, + 3074, + 3075, + 3076, + 3077, + 3078, + 3082, + 3083, + 3084, + 3085, + 3086, + 3087, + 3088, + 3089, + 3091, + 3092, + 3093, + 3094, + 3095, + 3096, + 3097, + 3101, + 3102, + 3103, + 3104, + 3105, + 3106, + 3107, + 3108, + 3110, + 3111, + 3112, + 3113, + 3114, + 3115, + 3116, + 3122, + 3125, + 3138, + 3139, + 3140, + 3141, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3151, + 3152, + 3153, + 3156, + 3157, + 3158, + 3159, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3167, + 3168, + 3169, + 3170, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3184, + 3185, + 3186, + 3187, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3199, + 3200, + 3201, + 3202, + 3204, + 3205, + 3207, + 3208, + 3209, + 3210, + 3212, + 3213, + 3215, + 3216, + 3218, + 3219 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n1 passed, 85 deselected in 1.09s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3207, + 3209, + 3210, + 3212, + 3213, + 3214, + 3215, + 3217, + 3218, + 3220, + 3221, + 3223, + 3224 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 85 deselected in 1.20s\n", + "stderr": "" + } + }, + { + "name": "FD09", + "selection": "more_reconstructions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1179, + 1180 + ] + ], + "patch": "--- \n+++ \n@@ -1176,6 +1176,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in list(axes)[len(idx):]:\n+ unused.plot([],[])\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n", + "candidate_sha256": "4ea4c2c1cbbd94860f59f7598eb65acf8e60297e3c9467d5d4297b41a24cc57c", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1090, + 1164, + 1165, + 1169, + 1171, + 1172, + 1173, + 1175, + 1177, + 1178, + 1179, + 1180, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1195, + 1196, + 1197, + 1200, + 1201, + 1202, + 1203, + 1205, + 1206, + 1207, + 1208, + 1209, + 1211, + 1212, + 1215, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n1 passed, 85 deselected in 0.79s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 1 >= 2\nE + where 1 = len()\nE + where = .lines" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1180, + 1181, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1196, + 1197, + 1198, + 1201, + 1202, + 1203, + 1204, + 1206, + 1207, + 1208, + 1209, + 1210, + 1212, + 1213, + 1216, + 1218, + 1258, + 1263, + 1264, + 1265, + 1317, + 1354, + 1359, + 1473, + 1478, + 1599, + 1602, + 1603, + 1604, + 1641, + 1646, + 1774, + 1779, + 1780, + 1954, + 1958, + 1959, + 2005, + 2009, + 2010, + 2057, + 2064, + 2164, + 2168, + 2216, + 2221, + 2222, + 2223, + 2290, + 2295, + 2392, + 2397, + 2529, + 2535, + 2674, + 2679, + 2680, + 2803, + 2807, + 2865, + 2871, + 2872, + 2985, + 2988 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 1 >= 2\nE + where 1 = len()\nE + where = .lines\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n1 failed, 85 deselected in 1.04s\n", + "stderr": "" + } + }, + { + "name": "FD11", + "selection": "log_histogram_keeps", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2823 + ], + [ + 2834 + ] + ], + "patch": "--- \n+++ \n@@ -2821,7 +2821,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(vals.min()), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n@@ -2832,7 +2832,7 @@\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n ax.hist(\n- vals,\n+ vals[vals>=1e-4] if xscale==\"log\" else vals,\n bins=bins,\n alpha=0.55,\n color=color,\n", + "candidate_sha256": "5930c4566f006317d795d17c7abe043d19c32f3977f5b56b6ed5a0ca90ea9c53", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n1 passed, 85 deselected in 1.32s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:342: in test_log_histogram_keeps_small_positive_errors\n missing, edges = visualizer_contracts.assert_histogram_population(call, errors)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests\\visualizer_review_contracts.py:130: in assert_histogram_population\n assert_array_equal(\nE AssertionError: \nE Arrays are not equal\nE Histogram omitted observations inside its own displayed support\nE Mismatched elements: 3 / 59 (5.08%)\nE Mismatch at indices:\nE [0]: 0 (ACTUAL), 1 (DESIRED)\nE [7]: 0 (ACTUAL), 1 (DESIRED)\nE [14]: 0 (ACTUAL), 1 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 1.\nE ACTUAL: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\nE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\nE 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])\nE DESIRED: array([1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\nE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\nE 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:342: in test_log_histogram_keeps_small_positive_errors\n missing, edges = visualizer_contracts.assert_histogram_population(call, errors)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests\\visualizer_review_contracts.py:130: in assert_histogram_population\n assert_array_equal(\nE AssertionError: \nE Arrays are not equal\nE Histogram omitted observations inside its own displayed support\nE Mismatched elements: 3 / 59 (5.08%)\nE Mismatch at indices:\nE [0]: 0 (ACTUAL), 1 (DESIRED)\nE [7]: 0 (ACTUAL), 1 (DESIRED)\nE [14]: 0 (ACTUAL), 1 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 1.\nE ACTUAL: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\nE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\nE 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])\nE DESIRED: array([1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\nE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\nE 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\n1 failed, 85 deselected in 1.53s\n", + "stderr": "" + } + }, + { + "name": "FD12", + "selection": "fifth_class", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1334, + 1335 + ] + ], + "patch": "--- \n+++ \n@@ -1331,6 +1331,8 @@\n )\n # M\u00e9diane trac\u00e9e pour robuste comparaison inter-classes.\n ax.axvline(np.median(vals), color=color, lw=2, ls=\"--\")\n+ for cls in classes[len(palette):]:\n+ ax.plot([],[],label=f\"{cls} (n={(y==cls).sum()})\")\n ax.set_xlabel(\"MSE de reconstruction\")\n ax.set_ylabel(\"Densit\u00e9\")\n ax.set_title(\"Distribution des erreurs de reconstruction par classe\")\n", + "candidate_sha256": "b37519ab25fa7ab3c9c4c6b3368adfb81196d35d6674894e44ebb03e95c431b8", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "fifth_class", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1316, + 1317, + 1318, + 1319, + 1320, + 1321, + 1323, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1332, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1343, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n1 passed, 85 deselected in 1.00s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "fifth_class", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:366: in test_histogram_does_not_silently_omit_fifth_class\n assert len(calls) == 5, \"Legend-only classes are not histogram populations\"\nE AssertionError: Legend-only classes are not histogram populations\nE assert 4 == 5\nE + where 4 = len([{'ax': . at 0x000001F3EAF4AEA0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 N = 43 019\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001F42D1ABBC0>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 N = 43 019\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001F3EAF4AEA0>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 N = 43 019\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001F42D1ABBC0>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\n2 failed, 84 deselected in 1.37s\n", + "stderr": "" + } + }, + { + "name": "FD10", + "selection": "truncated_variance_annotation", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 185 + ] + ], + "patch": "--- \n+++ \n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"\u2192 {cumvar[idx]*100:.1f}% avec {n_thresh} PCs\",\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n", + "candidate_sha256": "ab46a5dc5c97949be4f23c049415f85d0382a5329b53ab18a21b04f448ec7484", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "truncated_variance_annotation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n1 passed, 85 deselected in 0.82s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "truncated_variance_annotation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:326: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:326: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\n1 failed, 85 deselected in 0.95s\n", + "stderr": "" + } + }, + { + "name": "N01", + "selection": "xgboost_classes_confidence", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2076 + ] + ], + "patch": "--- \n+++ \n@@ -2081,7 +2081,7 @@\n alpha=0.55,\n linewidths=0,\n rasterized=True,\n- label=f\"{cls} (n={mask.sum()})\",\n+ label=f\"{classes_pred[(classes_pred.index(cls)+1)%len(classes_pred)]} (n={mask.sum()})\",\n )\n ax.legend(markerscale=4, fontsize=9, framealpha=0.9)\n ax.set_title(\"Pr\u00e9dictions XGBoost\", fontsize=12, fontweight=\"bold\")\n", + "candidate_sha256": "50853fb90afce1cf5e8b4cb4d8fca701b582b3dedb44bb9550aa5c455514ae8f", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2064, + 2067, + 2068, + 2069, + 2071, + 2072, + 2073, + 2075, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2085, + 2086, + 2087, + 2088, + 2089, + 2091, + 2092, + 2094, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2106, + 2107, + 2109, + 2112, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2121, + 2122, + 2124, + 2125, + 2127, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2136, + 2137, + 2139, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2148, + 2149, + 2150, + 2152, + 2153, + 2154, + 2155, + 2157, + 2158, + 2159, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n2 passed, 84 deselected in 1.03s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:507: in test_xgboost_classes_confidence_and_cluster_associations\n assert re.search(\nE AssertionError: Prediction label differs from its actual points\nE assert None\nE + where None = ('\\\\bF\\\\b', 'G (n=3)')\nE + where = .search\nE + and 'G (n=3)' = get_label()\nE + where get_label = .get_label" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:507: in test_xgboost_classes_confidence_and_cluster_associations\n assert re.search(\nE AssertionError: Prediction label differs from its actual points\nE assert None\nE + where None = ('\\\\bF\\\\b', 'G (n=3)')\nE + where = .search\nE + and 'G (n=3)' = get_label()\nE + where get_label = .get_label" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n_______ test_xgboost_classes_confidence_and_cluster_associations[None] ________\ntests\\test_dimred_visualizer.py:507: in test_xgboost_classes_confidence_and_cluster_associations\n assert re.search(\nE AssertionError: Prediction label differs from its actual points\nE assert None\nE + where None = ('\\\\bF\\\\b', 'G (n=3)')\nE + where = .search\nE + and 'G (n=3)' = get_label()\nE + where get_label = .get_label\n____ test_xgboost_classes_confidence_and_cluster_associations[confidence1] ____\ntests\\test_dimred_visualizer.py:507: in test_xgboost_classes_confidence_and_cluster_associations\n assert re.search(\nE AssertionError: Prediction label differs from its actual points\nE assert None\nE + where None = ('\\\\bF\\\\b', 'G (n=3)')\nE + where = .search\nE + and 'G (n=3)' = get_label()\nE + where get_label = .get_label\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_xgboost_classes_confidence_and_cluster_associations[None]\nFAILED tests/test_dimred_visualizer.py::test_xgboost_classes_confidence_and_cluster_associations[confidence1]\n2 failed, 84 deselected in 1.25s\n", + "stderr": "" + } + }, + { + "name": "N02", + "selection": "real_analyzer_state", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1445 + ] + ], + "patch": "--- \n+++ \n@@ -1449,7 +1449,7 @@\n marker=CLASS_MARKERS.get(cls, \"o\"),\n s=2,\n alpha=0.45,\n- label=f\"{cls} (n={mask.sum()})\",\n+ label=f\"{np.unique(y)[(list(np.unique(y)).index(cls)+1)%len(np.unique(y))]} (n={mask.sum()})\",\n rasterized=True,\n linewidths=0,\n )\n", + "candidate_sha256": "88d7e6f3129fd84d22c03d7ab14f92793c96b9580c2ac5937eba0efda98740a3", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1359, + 1360, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1371, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1386, + 1387, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1414, + 1415, + 1417, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1426, + 1427, + 1428, + 1429, + 1430, + 1432, + 1433, + 1434, + 1435, + 1437, + 1440, + 1441, + 1442, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1455, + 1456, + 1457, + 1458, + 1460, + 1461, + 1462, + 1463, + 1464, + 1466, + 1467, + 1468, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n3 passed, 83 deselected in 1.16s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:402: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:402: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:402: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFF [100%]\n================================== FAILURES ===================================\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels0] _______\ntests\\test_dimred_visualizer.py:402: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels1] _______\ntests\\test_dimred_visualizer.py:402: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels2] _______\ntests\\test_dimred_visualizer.py:402: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels0]\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels1]\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels2]\n3 failed, 83 deselected in 1.41s\n", + "stderr": "" + } + }, + { + "name": "N04", + "selection": "synthesis_preserves", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2966 + ] + ], + "patch": "--- \n+++ \n@@ -2964,7 +2964,7 @@\n ax.set_xlabel(xlabel, fontsize=8)\n if col == 0:\n ax.set_ylabel(\n- f\"{method_name}\\n{ylabel}\", fontsize=9, fontweight=\"bold\"\n+ f\"{METHODS[-1-row][0]}\\n{ylabel}\", fontsize=9, fontweight=\"bold\"\n )\n else:\n ax.set_ylabel(ylabel, fontsize=8)\n", + "candidate_sha256": "582917faca6080dc0e4f1c28c85117c5c52d80e53223745247f2630bdb8eba88", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2869, + 2871, + 2872, + 2873, + 2874, + 2875, + 2877, + 2879, + 2880, + 2882, + 2883, + 2885, + 2891, + 2892, + 2893, + 2894, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2906, + 2907, + 2908, + 2909, + 2911, + 2912, + 2913, + 2914, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2924, + 2926, + 2928, + 2930, + 2931, + 2932, + 2942, + 2943, + 2944, + 2945, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2954, + 2955, + 2956, + 2957, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2966, + 2967, + 2968, + 2970, + 2971, + 2973, + 2974, + 2976, + 2977, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n2 passed, 84 deselected in 0.99s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:660: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert re.search(expected_name, data_axes[row * 3].get_ylabel(), re.I)\nE AssertionError: assert None\nE + where None = ('\\\\bPCA\\\\b', 'Autoencodeur\\nPC2', re.IGNORECASE)\nE + where = .search\nE + and 'Autoencodeur\\nPC2' = get_ylabel()\nE + where get_ylabel = .get_ylabel\nE + and re.IGNORECASE = .I" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:660: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert re.search(expected_name, data_axes[row * 3].get_ylabel(), re.I)\nE AssertionError: assert None\nE + where None = ('\\\\bPCA\\\\b', 'Autoencodeur\\nPC2', re.IGNORECASE)\nE + where = .search\nE + and 'Autoencodeur\\nPC2' = get_ylabel()\nE + where get_ylabel = .get_ylabel\nE + and re.IGNORECASE = .I" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[False] ___\ntests\\test_dimred_visualizer.py:660: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert re.search(expected_name, data_axes[row * 3].get_ylabel(), re.I)\nE AssertionError: assert None\nE + where None = ('\\\\bPCA\\\\b', 'Autoencodeur\\nPC2', re.IGNORECASE)\nE + where = .search\nE + and 'Autoencodeur\\nPC2' = get_ylabel()\nE + where get_ylabel = .get_ylabel\nE + and re.IGNORECASE = .I\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[True] ____\ntests\\test_dimred_visualizer.py:660: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert re.search(expected_name, data_axes[row * 3].get_ylabel(), re.I)\nE AssertionError: assert None\nE + where None = ('\\\\bPCA\\\\b', 'Autoencodeur\\nPC2', re.IGNORECASE)\nE + where = .search\nE + and 'Autoencodeur\\nPC2' = get_ylabel()\nE + where get_ylabel = .get_ylabel\nE + and re.IGNORECASE = .I\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]\n2 failed, 84 deselected in 1.24s\n", + "stderr": "" + } + }, + { + "name": "N10", + "selection": "real_sklearn_trustworthiness", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2236 + ] + ], + "patch": "--- \n+++ \n@@ -2233,7 +2233,7 @@\n idx = rng.choice(len(X_ref), size=n, replace=False)\n X_sub = X_ref[idx]\n Zu_sub = Z_umap[idx]\n- Zt_sub = Z_tsne[idx]\n+ Zt_sub = Z_tsne[np.roll(idx,1)]\n \n trust_u, trust_t = [], []\n for k in k_values:\n", + "candidate_sha256": "9a92851045aa8e4839b1923d4d613d9f6a4c578cca63944ccfd78d6874c17396", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2223, + 2224, + 2226, + 2229, + 2230, + 2232, + 2233, + 2234, + 2235, + 2237, + 2238, + 2240, + 2241, + 2242, + 2243, + 2245, + 2246, + 2247, + 2249, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2259, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2268, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2278, + 2279, + 2280, + 2281, + 2282, + 2283, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n2 passed, 84 deselected in 2.97s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 24 / 24 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -0.13429338949088465 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 1.1776172821553483 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: 0.7540394717615756 (ACTUAL), -0.6451940968015629 (DESIRED)\nE [1, 1]: 1.9947886386434426 (ACTUAL), 0.0825255266666682 (DESIRED)\nE [2, 0]: -0.6451940968015629 (ACTUAL), -0.11873997633083841 (DESIRED)\nE Max absolute difference among violations: 3.0315093\nE Max relative difference among violations: 23.17177714\nE ACTUAL: array([[-0.134293, 1.177617],\nE [ 0.754039, 1.994789],\nE [-0.645194, 0.082526],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-0.645194, 0.082526],\nE [-0.11874 , -1.400206],..." + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 18 / 18 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: 0.21879687040848914 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: -1.1148814736874748 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: 0.7540394717615756 (ACTUAL), -1.0861640144823521 (DESIRED)\nE [1, 1]: 1.9947886386434426 (ACTUAL), -0.5693158913378338 (DESIRED)\nE [2, 0]: -1.0861640144823521 (ACTUAL), -1.215555026777933 (DESIRED)\nE Max absolute difference among violations: 3.10967011\nE Max relative difference among violations: 6.97417863\nE ACTUAL: array([[ 0.218797, -1.114881],\nE [ 0.754039, 1.994789],\nE [-1.086164, -0.569316],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-1.086164, -0.569316],\nE [-1.215555, 0.138822],..." + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[12] ________\ntests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 24 / 24 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -0.13429338949088465 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 1.1776172821553483 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: 0.7540394717615756 (ACTUAL), -0.6451940968015629 (DESIRED)\nE [1, 1]: 1.9947886386434426 (ACTUAL), 0.0825255266666682 (DESIRED)\nE [2, 0]: -0.6451940968015629 (ACTUAL), -0.11873997633083841 (DESIRED)\nE Max absolute difference among violations: 3.0315093\nE Max relative difference among violations: 23.17177714\nE ACTUAL: array([[-0.134293, 1.177617],\nE [ 0.754039, 1.994789],\nE [-0.645194, 0.082526],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-0.645194, 0.082526],\nE [-0.11874 , -1.400206],...\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[9] _________\ntests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 18 / 18 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: 0.21879687040848914 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: -1.1148814736874748 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: 0.7540394717615756 (ACTUAL), -1.0861640144823521 (DESIRED)\nE [1, 1]: 1.9947886386434426 (ACTUAL), -0.5693158913378338 (DESIRED)\nE [2, 0]: -1.0861640144823521 (ACTUAL), -1.215555026777933 (DESIRED)\nE Max absolute difference among violations: 3.10967011\nE Max relative difference among violations: 6.97417863\nE ACTUAL: array([[ 0.218797, -1.114881],\nE [ 0.754039, 1.994789],\nE [-1.086164, -0.569316],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-1.086164, -0.569316],\nE [-1.215555, 0.138822],...\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[12]\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[9]\n2 failed, 84 deselected in 3.23s\n", + "stderr": "" + } + }, + { + "name": "N05", + "selection": "interpolation_actual", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1278, + 1279 + ] + ], + "patch": "--- \n+++ \n@@ -1275,8 +1275,8 @@\n ax.plot(\n Z_interp[:, 0], Z_interp[:, 1], color=\"gray\", lw=1.5, zorder=2, alpha=0.6\n )\n- ax.scatter(*Z_interp[0], s=120, c=\"blue\", zorder=4, marker=\"*\", label=label_a)\n- ax.scatter(*Z_interp[-1], s=120, c=\"red\", zorder=4, marker=\"*\", label=label_b)\n+ ax.scatter(*Z_interp[0], s=120, c=\"blue\", zorder=4, marker=\"*\", label=(label_b))\n+ ax.scatter(*Z_interp[-1], s=120, c=\"red\", zorder=4, marker=\"*\", label=label_a)\n plt.colorbar(sc, ax=ax, label=\"\u03b1 (interpolation)\")\n ax.set_xlabel(\"Latent axe 1\")\n ax.set_ylabel(\"Latent axe 2\")\n", + "candidate_sha256": "13917cb73aeae55c591400ff03d4efccc14cb00db98ff3d27b4b51dcae35f4b0", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "interpolation_actual", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1266, + 1267, + 1268, + 1269, + 1271, + 1272, + 1274, + 1275, + 1277, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1285, + 1287, + 1288, + 1289, + 1291, + 1292, + 1293, + 1294, + 1295, + 1296, + 1298, + 1299, + 1300, + 1302, + 1303, + 1304, + 1305, + 1306, + 1308, + 1309, + 1312, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n1 passed, 85 deselected in 0.80s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "interpolation_actual", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:289: in test_interpolation_actual_path_feature_order_and_endpoints\n assert axes[0].collections[1].get_label() == \"A\"\nE AssertionError: assert 'B' == 'A'\nE \nE - A\nE + B" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_________ test_interpolation_actual_path_feature_order_and_endpoints __________\ntests\\test_dimred_visualizer.py:289: in test_interpolation_actual_path_feature_order_and_endpoints\n assert axes[0].collections[1].get_label() == \"A\"\nE AssertionError: assert 'B' == 'A'\nE \nE - A\nE + B\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_interpolation_actual_path_feature_order_and_endpoints\n1 failed, 85 deselected in 0.99s\n", + "stderr": "" + } + }, + { + "name": "N06", + "selection": "family_weights_bar", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 369 + ], + [ + 379 + ] + ], + "patch": "--- \n+++ \n@@ -374,7 +374,7 @@\n alpha=0.92,\n edgecolor=\"white\",\n linewidth=0.5,\n- label=\"PC1\",\n+ label=(\"PC2\"),\n )\n ax.bar(\n x + w / 2,\n@@ -384,7 +384,7 @@\n alpha=0.55,\n edgecolor=\"white\",\n linewidth=0.5,\n- label=\"PC2\",\n+ label=\"PC1\",\n hatch=\"//\",\n )\n # Lecture visuelle: opaque = PC1, hachur\u00e9/translucide = PC2.\n", + "candidate_sha256": "aab9151c32a9184032f1d5cb8092e7e951262c5c208f6af603017ab2a386df19", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "family_weights_bar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n1 passed, 85 deselected in 0.77s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "family_weights_bar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:172: in test_family_weights_bar_and_donut_angles\n assert_allclose([p.get_height() for p in series[\"PC1\"]], [80, 20, 0])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.0 (ACTUAL), 80 (DESIRED)\nE [1]: 30.0 (ACTUAL), 20 (DESIRED)\nE [2]: 70.0 (ACTUAL), 0 (DESIRED)\nE Max absolute difference among violations: 80.\nE Max relative difference among violations: 1.\nE ACTUAL: array([ 0., 30., 70.])\nE DESIRED: array([80, 20, 0])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n__________________ test_family_weights_bar_and_donut_angles ___________________\ntests\\test_dimred_visualizer.py:172: in test_family_weights_bar_and_donut_angles\n assert_allclose([p.get_height() for p in series[\"PC1\"]], [80, 20, 0])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.0 (ACTUAL), 80 (DESIRED)\nE [1]: 30.0 (ACTUAL), 20 (DESIRED)\nE [2]: 70.0 (ACTUAL), 0 (DESIRED)\nE Max absolute difference among violations: 80.\nE Max relative difference among violations: 1.\nE ACTUAL: array([ 0., 30., 70.])\nE DESIRED: array([80, 20, 0])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_family_weights_bar_and_donut_angles\n1 failed, 85 deselected in 0.86s\n", + "stderr": "" + } + }, + { + "name": "N03", + "selection": "real_export_readable", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024 + ] + ], + "patch": "--- \n+++ \n@@ -1015,7 +1015,13 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ import pickle\n+ clone=pickle.loads(pickle.dumps(fig))\n+ for axis in clone.axes:\n+ for collection in list(axis.collections):\n+ collection.remove()\n+ clone.savefig(path,bbox_inches=\"tight\",dpi=self.dpi)\n+ plt.close(clone)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n", + "candidate_sha256": "fc72e8f8514911cc968fd57dee9b6fb78846d55c43c6ac4763aa2c96a77b1421", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n2 passed, 84 deselected in 1.21s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:685: in test_real_export_readable_and_same_semantic_figure\n visualizer_contracts.assert_png_matches_figure(path, fig, c.viz.dpi)\ntests\\visualizer_review_contracts.py:45: in assert_png_matches_figure\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=1\nE Exported scientific artists differ from the returned figure\nE Mismatched elements: 162 / 312700 (0.0518%)\nE First 5 mismatches are at indices:\nE [28, 127, 0]: 255 (ACTUAL), 250 (DESIRED)\nE [28, 127, 1]: 255 (ACTUAL), 251 (DESIRED)\nE [28, 127, 2]: 255 (ACTUAL), 252 (DESIRED)\nE [28, 128, 0]: 255 (ACTUAL), 214 (DESIRED)\nE [28, 128, 1]: 255 (ACTUAL), 223 (DESIRED)\nE Max absolute difference among violations: 125\nE Max relative difference among violations: 0.96153846\nE ACTUAL: array([[[255, 255, 255, 255],\nE [255, 255, 255, 255],\nE [255, 255, 255, 255],...\nE DESIRED: array([[[255, 255, 255, 255],\nE [255, 255, 255, 255],\nE [255, 255, 255, 255],..." + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024, + 1025, + 1031, + 1098, + 1171, + 1172, + 1222, + 1262, + 1267, + 1268, + 1269, + 1321, + 1358, + 1363, + 1477, + 1482, + 1603, + 1606, + 1607, + 1608, + 1645, + 1650, + 1778, + 1783, + 1784, + 1958, + 1962, + 1963, + 2009, + 2013, + 2014, + 2061, + 2068, + 2168, + 2172, + 2220, + 2225, + 2226, + 2227, + 2294, + 2299, + 2396, + 2401, + 2533, + 2539, + 2678, + 2683, + 2684, + 2807, + 2811, + 2869, + 2875, + 2876, + 2989, + 2992 + ], + "stdout": "F. [100%]\n================================== FAILURES ===================================\n___________ test_real_export_readable_and_same_semantic_figure[png] ___________\ntests\\test_dimred_visualizer.py:685: in test_real_export_readable_and_same_semantic_figure\n visualizer_contracts.assert_png_matches_figure(path, fig, c.viz.dpi)\ntests\\visualizer_review_contracts.py:45: in assert_png_matches_figure\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=1\nE Exported scientific artists differ from the returned figure\nE Mismatched elements: 162 / 312700 (0.0518%)\nE First 5 mismatches are at indices:\nE [28, 127, 0]: 255 (ACTUAL), 250 (DESIRED)\nE [28, 127, 1]: 255 (ACTUAL), 251 (DESIRED)\nE [28, 127, 2]: 255 (ACTUAL), 252 (DESIRED)\nE [28, 128, 0]: 255 (ACTUAL), 214 (DESIRED)\nE [28, 128, 1]: 255 (ACTUAL), 223 (DESIRED)\nE Max absolute difference among violations: 125\nE Max relative difference among violations: 0.96153846\nE ACTUAL: array([[[255, 255, 255, 255],\nE [255, 255, 255, 255],\nE [255, 255, 255, 255],...\nE DESIRED: array([[[255, 255, 255, 255],\nE [255, 255, 255, 255],\nE [255, 255, 255, 255],...\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_export_readable_and_same_semantic_figure[png]\n1 failed, 1 passed, 84 deselected in 1.38s\n", + "stderr": "" + } + }, + { + "name": "A_TRUST", + "selection": "real_sklearn_trustworthiness", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2233 + ] + ], + "patch": "--- \n+++ \n@@ -2230,7 +2230,7 @@\n rng = np.random.default_rng(42)\n n = min(n_subsample, len(X_ref))\n # Sous-\u00e9chantillonnage pour ma\u00eetriser le co\u00fbt de calcul T(k).\n- idx = rng.choice(len(X_ref), size=n, replace=False)\n+ idx = np.sort(rng.permutation(len(X_ref))[:n])\n X_sub = X_ref[idx]\n Zu_sub = Z_umap[idx]\n Zt_sub = Z_tsne[idx]\n", + "candidate_sha256": "fcc67a8362f6f40330e5d109e8e0851d1fe3ef3870d3986f40d225d1bf91f9c2", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n2 passed, 84 deselected in 2.86s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n2 passed, 84 deselected in 2.90s\n", + "stderr": "" + } + }, + { + "name": "AD14", + "selection": "trustworthiness_axis_contains", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2279, + 2280 + ] + ], + "patch": "--- \n+++ \n@@ -2276,7 +2276,8 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0.75,1.01)\n+ ax.text(.1,.1,f\"T(k) < 0.75 hors champ : min = {min(trust_t):.3f}\",transform=ax.transAxes)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n", + "candidate_sha256": "b226e92e6afab749ae6ab91b70733b47ccaf8995f634945d03935428180aa4ba", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:196: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:196: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\n1 failed, 85 deselected in 2.88s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2285, + 2289, + 2294, + 2391, + 2396, + 2528, + 2534, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n1 passed, 85 deselected in 2.39s\n", + "stderr": "" + } + }, + { + "name": "A_EXPORT", + "selection": "default_output_directory or real_export_readable", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1087 + ], + [ + 1249 + ] + ], + "patch": "--- \n+++ \n@@ -1084,9 +1084,7 @@\n \"Autoencodeur \u2014 Historique d'entra\u00eenement (LAMOST DR5)\", fontsize=13, y=1.02\n )\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_training_history\")\n return fig, axes\n \n def plot_ae_embedding(self, Z, meta, y, save_path=None):\n@@ -1248,9 +1246,7 @@\n ax.legend(fontsize=9)\n ax.grid(True, alpha=0.3)\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_ae_vs_pca\")\n return fig, ax\n \n def plot_latent_interpolation(\n", + "candidate_sha256": "03cd6fc36c4863b2d546a7b7a0986741434046b13d54c198a9eca3cf45e23b75", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_output_directory or real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1462/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1462/test_default_output_directory_1').glob" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1165, + 1166, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "..FF [100%]\n================================== FAILURES ===================================\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1462/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1462/test_default_output_directory_1').glob\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\n2 failed, 2 passed, 82 deselected in 1.85s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_output_directory or real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1010, + 1012, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1088, + 1090, + 1163, + 1164, + 1214, + 1216, + 1218, + 1219, + 1221, + 1222, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1231, + 1233, + 1234, + 1236, + 1238, + 1239, + 1240, + 1241, + 1243, + 1244, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1252, + 1257, + 1258, + 1259, + 1311, + 1348, + 1353, + 1467, + 1472, + 1593, + 1596, + 1597, + 1598, + 1635, + 1640, + 1768, + 1773, + 1774, + 1948, + 1952, + 1953, + 1999, + 2003, + 2004, + 2051, + 2058, + 2158, + 2162, + 2210, + 2215, + 2216, + 2217, + 2284, + 2289, + 2386, + 2391, + 2523, + 2529, + 2668, + 2673, + 2674, + 2797, + 2801, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n4 passed, 82 deselected in 2.43s\n", + "stderr": "" + } + }, + { + "name": "A_METHODS", + "selection": "synthesis_preserves", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2887 + ] + ], + "patch": "--- \n+++ \n@@ -2884,7 +2884,7 @@\n if Z_umap is not None:\n # UMAP est optionnel selon le notebook ex\u00e9cut\u00e9.\n METHODS.append((\"UMAP\", Z_umap, \"UMAP 1\", \"UMAP 2\"))\n- METHODS.append((\"Autoencodeur\", Z_ae, \"Latent 1\", \"Latent 2\"))\n+ METHODS.append((\"AE\", Z_ae, \"Latent 1\", \"Latent 2\"))\n \n PARAMS = [\n (\"Classe spectrale\", None, None),\n", + "candidate_sha256": "c262ecf582497b62b25e0ba2a89eb1c64108a95e763215442d6b610a19acc030", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n2 passed, 84 deselected in 0.98s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n2 passed, 84 deselected in 0.95s\n", + "stderr": "" + } + }, + { + "name": "A_HIST", + "selection": "linear_histogram_truncation", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2833 + ] + ], + "patch": "--- \n+++ \n@@ -2830,7 +2830,7 @@\n if np.any(y == \"STAR\")\n else vals.max()\n )\n- bins = np.linspace(0, star_p99 * 1.5, 60)\n+ bins = np.linspace(0, float(np.max(mse_per_sample)), 60)\n ax.hist(\n vals,\n bins=bins,\n", + "candidate_sha256": "c4089757fef756a2e5f871e344afcfaba96057c66a8c6516a744d75ae4ed022a", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n1 failed, 85 deselected in 1.44s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n1 passed, 85 deselected in 1.33s\n", + "stderr": "" + } + }, + { + "name": "AD_HIST", + "selection": "linear_histogram_truncation", + "admissible": true, + "classification": "INCONCLUSIVE", + "reached_all_hunks": false, + "same_collection": true, + "changed_anchors": [ + [ + 154 + ], + [ + 185 + ], + [ + 288 + ], + [ + 869 + ], + [ + 1018 + ], + [ + 1087 + ], + [ + 1110 + ], + [ + 1178, + 1179 + ], + [ + 1252 + ], + [ + 1319 + ], + [ + 1414 + ], + [ + 1559 + ], + [ + 2019 + ], + [ + 2040 + ], + [ + 2068 + ], + [ + 2278 + ], + [ + 2320 + ], + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2527, + 2528 + ], + [ + 2816 + ], + [ + 2827, + 2828, + 2829 + ], + [ + 3035 + ], + [ + 3209 + ] + ], + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, 100 * ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"{n_thresh} PCs\\n\u2192 {pca_analyzer.explained_variance_ratio[:n_thresh].sum()*100:.1f}%\",\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n@@ -285,7 +285,7 @@\n df = df.sort_values(\"loading\")\n \n # Couleur encodant le signe physique de la contribution.\n- colors = [\"#DD8452\" if v < 0 else \"#4C72B0\" for v in df[\"loading\"]]\n+ colors = [\"#CC5500\" if v < 0 else \"#0055CC\" for v in df[\"loading\"]]\n fig, ax = plt.subplots(figsize=(8, max(4, n_top * 0.35)), dpi=self.dpi)\n \n ax.barh(\n@@ -869,7 +869,7 @@\n ax.text(\n lam,\n ymax * 0.88,\n- nom,\n+ nom.replace(chr(92)*2, chr(92)),\n rotation=90,\n fontsize=6,\n color=\"crimson\",\n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ fig.canvas.print_figure(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n@@ -1084,9 +1084,7 @@\n \"Autoencodeur \u2014 Historique d'entra\u00eenement (LAMOST DR5)\", fontsize=13, y=1.02\n )\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_training_history\")\n return fig, axes\n \n def plot_ae_embedding(self, Z, meta, y, save_path=None):\n@@ -1109,6 +1107,7 @@\n \n PALETTE = {\"STAR\": \"#4C72B0\", \"GALAXY\": \"#DD8452\", \"QSO\": \"#55A868\"}\n MARKERS = {\"STAR\": \"o\", \"GALAXY\": \"s\", \"QSO\": \"^\"}\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -1176,6 +1175,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in axes[len(idx):]:\n+ unused.set_visible(False)\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n@@ -1248,9 +1249,7 @@\n ax.legend(fontsize=9)\n ax.grid(True, alpha=0.3)\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_ae_vs_pca\")\n return fig, ax\n \n def plot_latent_interpolation(\n@@ -1317,7 +1316,7 @@\n classes = np.unique(y)\n palette = [\"#4C72B0\", \"#DD8452\", \"#55A868\", \"#C44E52\"]\n fig, ax = plt.subplots(figsize=(9, 5), dpi=self.dpi)\n- for cls, color in zip(classes, palette):\n+ for cls, color in zip(classes, palette*((len(classes)+len(palette)-1)//len(palette))):\n mask = y == cls\n vals = mse_per_sample[mask]\n # Histogrammes normalis\u00e9s pour comparer les formes de distribution.\n@@ -1413,7 +1412,7 @@\n ),\n )\n sm = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n@@ -1558,7 +1557,7 @@\n )\n ax.grid(True, alpha=0.2)\n sm2 = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm2.set_array([])\n plt.colorbar(\n@@ -2017,7 +2016,7 @@\n ncols = 4\n nrows = (n_show + ncols - 1) // ncols\n fig, axes = plt.subplots(nrows, ncols, figsize=(5 * ncols, 4 * nrows), dpi=120)\n- axes_flat = axes.flatten() if n_show > 1 else [axes]\n+ axes_flat = np.asarray(axes).ravel()\n \n for ax_i, cid in zip(axes_flat, top_cids):\n profile = cluster_means.loc[cid]\n@@ -2038,7 +2037,7 @@\n ax_i.set_xlabel(\"Score moyen (\u03c3)\", fontsize=8)\n ax_i.grid(axis=\"x\", alpha=0.3)\n ax_i.set_xlim(-3, 3)\n- for ax_i in axes_flat[n_show:]:\n+ for ax_i in axes_flat[len(top_cids):]:\n ax_i.axis(\"off\")\n fig.suptitle(\n \"Top-5 features caract\u00e9ristiques par cluster HDBSCAN\\n\"\n@@ -2066,7 +2065,7 @@\n \n # V\u00e9rifie si une vraie probabilit\u00e9 est disponible.\n classes_pred = sorted(set(y_pred))\n- has_proba = confidence is not None and not np.all(confidence == 1.0)\n+ has_proba = confidence is not None\n fig, axes = plt.subplots(1, 3, figsize=(22, 8), dpi=self.dpi)\n \n ax = axes[0]\n@@ -2276,7 +2275,7 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0, 1.01)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n@@ -2318,6 +2317,7 @@\n ]\n \n fig, axes = plt.subplots(1, 1 + len(available), figsize=(22, 5), dpi=self.dpi)\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2533,6 +2524,8 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ if not (len(X) == len(X_recon) == len(spectral_types)):\n+ raise RuntimeError(\"Observation alignment: incompatible lengths\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n@@ -2821,7 +2814,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(max(vals.min(), np.finfo(float).tiny)), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n@@ -2831,6 +2824,9 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls}: excluded {missing} of {len(vals)} outside support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n@@ -3054,7 +3050,7 @@\n MS_G_HOT + (MS_G_COOL - MS_G_HOT) * 0.35,\n ),\n (T_LO + (T_HI - T_LO) * 0.25, MS_G_COOL - 0.10),\n- (T_LO + T_PAD, G_HI - T_PAD * 2),\n+ (T_LO + T_PAD, G_HI - G_PAD * 2),\n (T_LO + T_PAD, G_HI - G_PAD),\n (T_LO + (T_HI - T_LO) * 0.20, MS_G_COOL + MS_W * 0.6),\n (\n@@ -3212,7 +3208,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 population fournie\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "candidate_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n1 failed, 85 deselected in 1.41s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-dyru5hgo\\result.xml -\n1 passed, 85 deselected in 1.33s\n", + "stderr": "" + } + } + ], + "executed_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/proofs_dimred_visualizer.py": "6fd1f1ed7d1cc5202f8835b3e32ab838d5c9df05754e11d524af05c744f1fbd3", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3" + } +} diff --git a/audit/m28_review_discrimination_results.json b/audit/m28_review_discrimination_results.json new file mode 100644 index 0000000..3421772 --- /dev/null +++ b/audit/m28_review_discrimination_results.json @@ -0,0 +1,10765 @@ +{ + "active_head": "4364c61f56d91f7ec93c5c6072b9f88c46023241", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "working_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/proofs_dimred_visualizer.py": "6fd1f1ed7d1cc5202f8835b3e32ab838d5c9df05754e11d524af05c744f1fbd3", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3" + }, + "runs": [ + { + "name": "AD05", + "selection": "cluster_colorbar", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1420, + 1421, + 1422 + ], + [ + 1564, + 1565, + 1566 + ] + ], + "patch": "--- \n+++ \n@@ -1417,9 +1417,9 @@\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n- plt.colorbar(\n- sm, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n- ).ax.tick_params(labelsize=8)\n+ ax.legend(handles=[mpatches.Patch(color=color_map[c],label=f\"C{c}\") for c in cluster_ids])\n+ for annotation in list(ax.texts):\n+ annotation.remove()\n ax.text(\n 0.02,\n 0.98,\n@@ -1561,9 +1561,9 @@\n cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n )\n sm2.set_array([])\n- plt.colorbar(\n- sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n- ).ax.tick_params(labelsize=8)\n+ ax.legend(handles=[mpatches.Patch(color=color_map[c],label=f\"C{c}\") for c in cluster_ids])\n+ for annotation in list(ax.texts):\n+ annotation.remove()\n \n ax2 = axes[1]\n valid_teff = np.isfinite(teff)\n", + "candidate_sha256": "6b87a55bafb24be9782e14af82259b4b66f426cb9f4bcf689d5f08adc7fb82bb", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n2 failed, 84 deselected in 1.64s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n2 passed, 84 deselected in 1.21s\n", + "stderr": "" + } + }, + { + "name": "AC05", + "selection": "cluster_colorbar", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1415 + ], + [ + 1560 + ] + ], + "patch": "--- \n+++ \n@@ -1413,7 +1413,7 @@\n ),\n )\n sm = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n@@ -1558,7 +1558,7 @@\n )\n ax.grid(True, alpha=0.2)\n sm2 = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm2.set_array([])\n plt.colorbar(\n", + "candidate_sha256": "0ca8b2a77d45ca5e7e0c55444c021152cb005d5ef896b2725e86fabf00358c95", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n2 failed, 84 deselected in 1.42s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n2 passed, 84 deselected in 1.25s\n", + "stderr": "" + } + }, + { + "name": "FD02", + "selection": "hr_region_vertices", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 3206, + 3207 + ] + ], + "patch": "--- \n+++ \n@@ -3203,7 +3203,8 @@\n ax.invert_xaxis()\n ax.invert_yaxis()\n ax.set_xlim(T_HI + T_PAD * 5, T_LO - T_PAD * 5)\n- ax.set_ylim(G_HI + G_PAD * 5, G_LO - G_PAD * 5)\n+ _ys = [v[1] for r in REGIONS for v in r[\"poly\"]]\n+ ax.set_ylim(max(G_HI+G_PAD*5,max(_ys)),min(G_LO-G_PAD*5,min(_ys)))\n \n ax.xaxis.set_major_formatter(\n FuncFormatter(lambda x, _: f\"{int(x):,}\".replace(\",\", \"\\u202f\"))\n", + "candidate_sha256": "3b7b864ec4aca8ebe8af3fcb887b29c87e31fa8c150f1fa6654320fe9678d13f", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982, + 2995, + 2996, + 2997, + 2999, + 3000, + 3004, + 3005, + 3006, + 3011, + 3012, + 3013, + 3014, + 3016, + 3017, + 3026, + 3027, + 3028, + 3031, + 3034, + 3035, + 3037, + 3038, + 3039, + 3040, + 3041, + 3042, + 3043, + 3044, + 3046, + 3047, + 3048, + 3049, + 3050, + 3052, + 3053, + 3054, + 3055, + 3056, + 3057, + 3058, + 3060, + 3064, + 3065, + 3066, + 3067, + 3068, + 3069, + 3070, + 3071, + 3073, + 3074, + 3075, + 3076, + 3077, + 3078, + 3082, + 3083, + 3084, + 3085, + 3086, + 3087, + 3088, + 3089, + 3091, + 3092, + 3093, + 3094, + 3095, + 3096, + 3097, + 3101, + 3102, + 3103, + 3104, + 3105, + 3106, + 3107, + 3108, + 3110, + 3111, + 3112, + 3113, + 3114, + 3115, + 3116, + 3122, + 3125, + 3138, + 3139, + 3140, + 3141, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3151, + 3152, + 3153, + 3156, + 3157, + 3158, + 3159, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3167, + 3168, + 3169, + 3170, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3184, + 3185, + 3186, + 3187, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3199, + 3200, + 3201, + 3202, + 3204, + 3205, + 3207, + 3208, + 3209, + 3210, + 3212, + 3213, + 3215, + 3216, + 3218, + 3219 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n1 passed, 85 deselected in 1.03s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3207, + 3209, + 3210, + 3212, + 3213, + 3214, + 3215, + 3217, + 3218, + 3220, + 3221, + 3223, + 3224 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 85 deselected in 1.19s\n", + "stderr": "" + } + }, + { + "name": "FD09", + "selection": "more_reconstructions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1179, + 1180 + ] + ], + "patch": "--- \n+++ \n@@ -1176,6 +1176,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in list(axes)[len(idx):]:\n+ unused.plot([],[])\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n", + "candidate_sha256": "4ea4c2c1cbbd94860f59f7598eb65acf8e60297e3c9467d5d4297b41a24cc57c", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1090, + 1164, + 1165, + 1169, + 1171, + 1172, + 1173, + 1175, + 1177, + 1178, + 1179, + 1180, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1195, + 1196, + 1197, + 1200, + 1201, + 1202, + 1203, + 1205, + 1206, + 1207, + 1208, + 1209, + 1211, + 1212, + 1215, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n1 passed, 85 deselected in 0.78s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 1 >= 2\nE + where 1 = len()\nE + where = .lines" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1180, + 1181, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1196, + 1197, + 1198, + 1201, + 1202, + 1203, + 1204, + 1206, + 1207, + 1208, + 1209, + 1210, + 1212, + 1213, + 1216, + 1218, + 1258, + 1263, + 1264, + 1265, + 1317, + 1354, + 1359, + 1473, + 1478, + 1599, + 1602, + 1603, + 1604, + 1641, + 1646, + 1774, + 1779, + 1780, + 1954, + 1958, + 1959, + 2005, + 2009, + 2010, + 2057, + 2064, + 2164, + 2168, + 2216, + 2221, + 2222, + 2223, + 2290, + 2295, + 2392, + 2397, + 2529, + 2535, + 2674, + 2679, + 2680, + 2803, + 2807, + 2865, + 2871, + 2872, + 2985, + 2988 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 1 >= 2\nE + where 1 = len()\nE + where = .lines\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n1 failed, 85 deselected in 1.01s\n", + "stderr": "" + } + }, + { + "name": "FD11", + "selection": "log_histogram_keeps", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2823 + ], + [ + 2834 + ] + ], + "patch": "--- \n+++ \n@@ -2821,7 +2821,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(vals.min()), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n@@ -2832,7 +2832,7 @@\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n ax.hist(\n- vals,\n+ vals[vals>=1e-4] if xscale==\"log\" else vals,\n bins=bins,\n alpha=0.55,\n color=color,\n", + "candidate_sha256": "5930c4566f006317d795d17c7abe043d19c32f3977f5b56b6ed5a0ca90ea9c53", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n1 passed, 85 deselected in 1.32s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:342: in test_log_histogram_keeps_small_positive_errors\n missing, edges = visualizer_contracts.assert_histogram_population(call, errors)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests\\visualizer_review_contracts.py:130: in assert_histogram_population\n assert_array_equal(\nE AssertionError: \nE Arrays are not equal\nE Histogram omitted observations inside its own displayed support\nE Mismatched elements: 3 / 59 (5.08%)\nE Mismatch at indices:\nE [0]: 0 (ACTUAL), 1 (DESIRED)\nE [7]: 0 (ACTUAL), 1 (DESIRED)\nE [14]: 0 (ACTUAL), 1 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 1.\nE ACTUAL: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\nE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\nE 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])\nE DESIRED: array([1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\nE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\nE 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:342: in test_log_histogram_keeps_small_positive_errors\n missing, edges = visualizer_contracts.assert_histogram_population(call, errors)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests\\visualizer_review_contracts.py:130: in assert_histogram_population\n assert_array_equal(\nE AssertionError: \nE Arrays are not equal\nE Histogram omitted observations inside its own displayed support\nE Mismatched elements: 3 / 59 (5.08%)\nE Mismatch at indices:\nE [0]: 0 (ACTUAL), 1 (DESIRED)\nE [7]: 0 (ACTUAL), 1 (DESIRED)\nE [14]: 0 (ACTUAL), 1 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 1.\nE ACTUAL: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\nE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\nE 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])\nE DESIRED: array([1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\nE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\nE 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\n1 failed, 85 deselected in 1.45s\n", + "stderr": "" + } + }, + { + "name": "FD12", + "selection": "fifth_class", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1334, + 1335 + ] + ], + "patch": "--- \n+++ \n@@ -1331,6 +1331,8 @@\n )\n # M\u00e9diane trac\u00e9e pour robuste comparaison inter-classes.\n ax.axvline(np.median(vals), color=color, lw=2, ls=\"--\")\n+ for cls in classes[len(palette):]:\n+ ax.plot([],[],label=f\"{cls} (n={(y==cls).sum()})\")\n ax.set_xlabel(\"MSE de reconstruction\")\n ax.set_ylabel(\"Densit\u00e9\")\n ax.set_title(\"Distribution des erreurs de reconstruction par classe\")\n", + "candidate_sha256": "b37519ab25fa7ab3c9c4c6b3368adfb81196d35d6674894e44ebb03e95c431b8", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "fifth_class", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1316, + 1317, + 1318, + 1319, + 1320, + 1321, + 1323, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1332, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1343, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n1 passed, 85 deselected in 0.96s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "fifth_class", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:366: in test_histogram_does_not_silently_omit_fifth_class\n assert len(calls) == 5, \"Legend-only classes are not histogram populations\"\nE AssertionError: Legend-only classes are not histogram populations\nE assert 4 == 5\nE + where 4 = len([{'ax': . at 0x0000024D3EEBAEA0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 N = 43 019\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000024D7F10BBC0>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 N = 43 019\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000024D3EEBAEA0>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 N = 43 019\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000024D7F10BBC0>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\n2 failed, 84 deselected in 1.32s\n", + "stderr": "" + } + }, + { + "name": "FD10", + "selection": "truncated_variance_annotation", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 185 + ] + ], + "patch": "--- \n+++ \n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"\u2192 {cumvar[idx]*100:.1f}% avec {n_thresh} PCs\",\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n", + "candidate_sha256": "ab46a5dc5c97949be4f23c049415f85d0382a5329b53ab18a21b04f448ec7484", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "truncated_variance_annotation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n1 passed, 85 deselected in 0.80s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "truncated_variance_annotation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:326: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:326: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\n1 failed, 85 deselected in 0.93s\n", + "stderr": "" + } + }, + { + "name": "N01", + "selection": "xgboost_classes_confidence", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2076 + ] + ], + "patch": "--- \n+++ \n@@ -2081,7 +2081,7 @@\n alpha=0.55,\n linewidths=0,\n rasterized=True,\n- label=f\"{cls} (n={mask.sum()})\",\n+ label=f\"{classes_pred[(classes_pred.index(cls)+1)%len(classes_pred)]} (n={mask.sum()})\",\n )\n ax.legend(markerscale=4, fontsize=9, framealpha=0.9)\n ax.set_title(\"Pr\u00e9dictions XGBoost\", fontsize=12, fontweight=\"bold\")\n", + "candidate_sha256": "50853fb90afce1cf5e8b4cb4d8fca701b582b3dedb44bb9550aa5c455514ae8f", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2064, + 2067, + 2068, + 2069, + 2071, + 2072, + 2073, + 2075, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2085, + 2086, + 2087, + 2088, + 2089, + 2091, + 2092, + 2094, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2106, + 2107, + 2109, + 2112, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2121, + 2122, + 2124, + 2125, + 2127, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2136, + 2137, + 2139, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2148, + 2149, + 2150, + 2152, + 2153, + 2154, + 2155, + 2157, + 2158, + 2159, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n2 passed, 84 deselected in 1.04s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:507: in test_xgboost_classes_confidence_and_cluster_associations\n assert re.search(\nE AssertionError: Prediction label differs from its actual points\nE assert None\nE + where None = ('\\\\bF\\\\b', 'G (n=3)')\nE + where = .search\nE + and 'G (n=3)' = get_label()\nE + where get_label = .get_label" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:507: in test_xgboost_classes_confidence_and_cluster_associations\n assert re.search(\nE AssertionError: Prediction label differs from its actual points\nE assert None\nE + where None = ('\\\\bF\\\\b', 'G (n=3)')\nE + where = .search\nE + and 'G (n=3)' = get_label()\nE + where get_label = .get_label" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n_______ test_xgboost_classes_confidence_and_cluster_associations[None] ________\ntests\\test_dimred_visualizer.py:507: in test_xgboost_classes_confidence_and_cluster_associations\n assert re.search(\nE AssertionError: Prediction label differs from its actual points\nE assert None\nE + where None = ('\\\\bF\\\\b', 'G (n=3)')\nE + where = .search\nE + and 'G (n=3)' = get_label()\nE + where get_label = .get_label\n____ test_xgboost_classes_confidence_and_cluster_associations[confidence1] ____\ntests\\test_dimred_visualizer.py:507: in test_xgboost_classes_confidence_and_cluster_associations\n assert re.search(\nE AssertionError: Prediction label differs from its actual points\nE assert None\nE + where None = ('\\\\bF\\\\b', 'G (n=3)')\nE + where = .search\nE + and 'G (n=3)' = get_label()\nE + where get_label = .get_label\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_xgboost_classes_confidence_and_cluster_associations[None]\nFAILED tests/test_dimred_visualizer.py::test_xgboost_classes_confidence_and_cluster_associations[confidence1]\n2 failed, 84 deselected in 1.21s\n", + "stderr": "" + } + }, + { + "name": "N02", + "selection": "real_analyzer_state", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1445 + ] + ], + "patch": "--- \n+++ \n@@ -1449,7 +1449,7 @@\n marker=CLASS_MARKERS.get(cls, \"o\"),\n s=2,\n alpha=0.45,\n- label=f\"{cls} (n={mask.sum()})\",\n+ label=f\"{np.unique(y)[(list(np.unique(y)).index(cls)+1)%len(np.unique(y))]} (n={mask.sum()})\",\n rasterized=True,\n linewidths=0,\n )\n", + "candidate_sha256": "88d7e6f3129fd84d22c03d7ab14f92793c96b9580c2ac5937eba0efda98740a3", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1359, + 1360, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1371, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1386, + 1387, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1414, + 1415, + 1417, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1426, + 1427, + 1428, + 1429, + 1430, + 1432, + 1433, + 1434, + 1435, + 1437, + 1440, + 1441, + 1442, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1455, + 1456, + 1457, + 1458, + 1460, + 1461, + 1462, + 1463, + 1464, + 1466, + 1467, + 1468, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n3 passed, 83 deselected in 1.10s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:402: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:402: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:402: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFF [100%]\n================================== FAILURES ===================================\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels0] _______\ntests\\test_dimred_visualizer.py:402: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels1] _______\ntests\\test_dimred_visualizer.py:402: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels2] _______\ntests\\test_dimred_visualizer.py:402: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels0]\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels1]\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels2]\n3 failed, 83 deselected in 1.40s\n", + "stderr": "" + } + }, + { + "name": "N04", + "selection": "synthesis_preserves", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2966 + ] + ], + "patch": "--- \n+++ \n@@ -2964,7 +2964,7 @@\n ax.set_xlabel(xlabel, fontsize=8)\n if col == 0:\n ax.set_ylabel(\n- f\"{method_name}\\n{ylabel}\", fontsize=9, fontweight=\"bold\"\n+ f\"{METHODS[-1-row][0]}\\n{ylabel}\", fontsize=9, fontweight=\"bold\"\n )\n else:\n ax.set_ylabel(ylabel, fontsize=8)\n", + "candidate_sha256": "582917faca6080dc0e4f1c28c85117c5c52d80e53223745247f2630bdb8eba88", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2869, + 2871, + 2872, + 2873, + 2874, + 2875, + 2877, + 2879, + 2880, + 2882, + 2883, + 2885, + 2891, + 2892, + 2893, + 2894, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2906, + 2907, + 2908, + 2909, + 2911, + 2912, + 2913, + 2914, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2924, + 2926, + 2928, + 2930, + 2931, + 2932, + 2942, + 2943, + 2944, + 2945, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2954, + 2955, + 2956, + 2957, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2966, + 2967, + 2968, + 2970, + 2971, + 2973, + 2974, + 2976, + 2977, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n2 passed, 84 deselected in 0.95s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:660: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert re.search(expected_name, data_axes[row * 3].get_ylabel(), re.I)\nE AssertionError: assert None\nE + where None = ('\\\\bPCA\\\\b', 'Autoencodeur\\nPC2', re.IGNORECASE)\nE + where = .search\nE + and 'Autoencodeur\\nPC2' = get_ylabel()\nE + where get_ylabel = .get_ylabel\nE + and re.IGNORECASE = .I" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:660: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert re.search(expected_name, data_axes[row * 3].get_ylabel(), re.I)\nE AssertionError: assert None\nE + where None = ('\\\\bPCA\\\\b', 'Autoencodeur\\nPC2', re.IGNORECASE)\nE + where = .search\nE + and 'Autoencodeur\\nPC2' = get_ylabel()\nE + where get_ylabel = .get_ylabel\nE + and re.IGNORECASE = .I" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[False] ___\ntests\\test_dimred_visualizer.py:660: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert re.search(expected_name, data_axes[row * 3].get_ylabel(), re.I)\nE AssertionError: assert None\nE + where None = ('\\\\bPCA\\\\b', 'Autoencodeur\\nPC2', re.IGNORECASE)\nE + where = .search\nE + and 'Autoencodeur\\nPC2' = get_ylabel()\nE + where get_ylabel = .get_ylabel\nE + and re.IGNORECASE = .I\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[True] ____\ntests\\test_dimred_visualizer.py:660: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert re.search(expected_name, data_axes[row * 3].get_ylabel(), re.I)\nE AssertionError: assert None\nE + where None = ('\\\\bPCA\\\\b', 'Autoencodeur\\nPC2', re.IGNORECASE)\nE + where = .search\nE + and 'Autoencodeur\\nPC2' = get_ylabel()\nE + where get_ylabel = .get_ylabel\nE + and re.IGNORECASE = .I\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]\n2 failed, 84 deselected in 1.14s\n", + "stderr": "" + } + }, + { + "name": "N10", + "selection": "real_sklearn_trustworthiness", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2236 + ] + ], + "patch": "--- \n+++ \n@@ -2233,7 +2233,7 @@\n idx = rng.choice(len(X_ref), size=n, replace=False)\n X_sub = X_ref[idx]\n Zu_sub = Z_umap[idx]\n- Zt_sub = Z_tsne[idx]\n+ Zt_sub = Z_tsne[np.roll(idx,1)]\n \n trust_u, trust_t = [], []\n for k in k_values:\n", + "candidate_sha256": "9a92851045aa8e4839b1923d4d613d9f6a4c578cca63944ccfd78d6874c17396", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2223, + 2224, + 2226, + 2229, + 2230, + 2232, + 2233, + 2234, + 2235, + 2237, + 2238, + 2240, + 2241, + 2242, + 2243, + 2245, + 2246, + 2247, + 2249, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2259, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2268, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2278, + 2279, + 2280, + 2281, + 2282, + 2283, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n2 passed, 84 deselected in 2.85s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 24 / 24 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -0.13429338949088465 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 1.1776172821553483 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: 0.7540394717615756 (ACTUAL), -0.6451940968015629 (DESIRED)\nE [1, 1]: 1.9947886386434426 (ACTUAL), 0.0825255266666682 (DESIRED)\nE [2, 0]: -0.6451940968015629 (ACTUAL), -0.11873997633083841 (DESIRED)\nE Max absolute difference among violations: 3.0315093\nE Max relative difference among violations: 23.17177714\nE ACTUAL: array([[-0.134293, 1.177617],\nE [ 0.754039, 1.994789],\nE [-0.645194, 0.082526],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-0.645194, 0.082526],\nE [-0.11874 , -1.400206],..." + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 18 / 18 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: 0.21879687040848914 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: -1.1148814736874748 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: 0.7540394717615756 (ACTUAL), -1.0861640144823521 (DESIRED)\nE [1, 1]: 1.9947886386434426 (ACTUAL), -0.5693158913378338 (DESIRED)\nE [2, 0]: -1.0861640144823521 (ACTUAL), -1.215555026777933 (DESIRED)\nE Max absolute difference among violations: 3.10967011\nE Max relative difference among violations: 6.97417863\nE ACTUAL: array([[ 0.218797, -1.114881],\nE [ 0.754039, 1.994789],\nE [-1.086164, -0.569316],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-1.086164, -0.569316],\nE [-1.215555, 0.138822],..." + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[12] ________\ntests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 24 / 24 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -0.13429338949088465 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 1.1776172821553483 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: 0.7540394717615756 (ACTUAL), -0.6451940968015629 (DESIRED)\nE [1, 1]: 1.9947886386434426 (ACTUAL), 0.0825255266666682 (DESIRED)\nE [2, 0]: -0.6451940968015629 (ACTUAL), -0.11873997633083841 (DESIRED)\nE Max absolute difference among violations: 3.0315093\nE Max relative difference among violations: 23.17177714\nE ACTUAL: array([[-0.134293, 1.177617],\nE [ 0.754039, 1.994789],\nE [-0.645194, 0.082526],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-0.645194, 0.082526],\nE [-0.11874 , -1.400206],...\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[9] _________\ntests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 18 / 18 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: 0.21879687040848914 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: -1.1148814736874748 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: 0.7540394717615756 (ACTUAL), -1.0861640144823521 (DESIRED)\nE [1, 1]: 1.9947886386434426 (ACTUAL), -0.5693158913378338 (DESIRED)\nE [2, 0]: -1.0861640144823521 (ACTUAL), -1.215555026777933 (DESIRED)\nE Max absolute difference among violations: 3.10967011\nE Max relative difference among violations: 6.97417863\nE ACTUAL: array([[ 0.218797, -1.114881],\nE [ 0.754039, 1.994789],\nE [-1.086164, -0.569316],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-1.086164, -0.569316],\nE [-1.215555, 0.138822],...\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[12]\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[9]\n2 failed, 84 deselected in 3.37s\n", + "stderr": "" + } + }, + { + "name": "N05", + "selection": "interpolation_actual", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1278, + 1279 + ] + ], + "patch": "--- \n+++ \n@@ -1275,8 +1275,8 @@\n ax.plot(\n Z_interp[:, 0], Z_interp[:, 1], color=\"gray\", lw=1.5, zorder=2, alpha=0.6\n )\n- ax.scatter(*Z_interp[0], s=120, c=\"blue\", zorder=4, marker=\"*\", label=label_a)\n- ax.scatter(*Z_interp[-1], s=120, c=\"red\", zorder=4, marker=\"*\", label=label_b)\n+ ax.scatter(*Z_interp[0], s=120, c=\"blue\", zorder=4, marker=\"*\", label=(label_b))\n+ ax.scatter(*Z_interp[-1], s=120, c=\"red\", zorder=4, marker=\"*\", label=label_a)\n plt.colorbar(sc, ax=ax, label=\"\u03b1 (interpolation)\")\n ax.set_xlabel(\"Latent axe 1\")\n ax.set_ylabel(\"Latent axe 2\")\n", + "candidate_sha256": "13917cb73aeae55c591400ff03d4efccc14cb00db98ff3d27b4b51dcae35f4b0", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "interpolation_actual", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1266, + 1267, + 1268, + 1269, + 1271, + 1272, + 1274, + 1275, + 1277, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1285, + 1287, + 1288, + 1289, + 1291, + 1292, + 1293, + 1294, + 1295, + 1296, + 1298, + 1299, + 1300, + 1302, + 1303, + 1304, + 1305, + 1306, + 1308, + 1309, + 1312, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n1 passed, 85 deselected in 0.81s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "interpolation_actual", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:289: in test_interpolation_actual_path_feature_order_and_endpoints\n assert axes[0].collections[1].get_label() == \"A\"\nE AssertionError: assert 'B' == 'A'\nE \nE - A\nE + B" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_________ test_interpolation_actual_path_feature_order_and_endpoints __________\ntests\\test_dimred_visualizer.py:289: in test_interpolation_actual_path_feature_order_and_endpoints\n assert axes[0].collections[1].get_label() == \"A\"\nE AssertionError: assert 'B' == 'A'\nE \nE - A\nE + B\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_interpolation_actual_path_feature_order_and_endpoints\n1 failed, 85 deselected in 0.94s\n", + "stderr": "" + } + }, + { + "name": "N06", + "selection": "family_weights_bar", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 369 + ], + [ + 379 + ] + ], + "patch": "--- \n+++ \n@@ -374,7 +374,7 @@\n alpha=0.92,\n edgecolor=\"white\",\n linewidth=0.5,\n- label=\"PC1\",\n+ label=(\"PC2\"),\n )\n ax.bar(\n x + w / 2,\n@@ -384,7 +384,7 @@\n alpha=0.55,\n edgecolor=\"white\",\n linewidth=0.5,\n- label=\"PC2\",\n+ label=\"PC1\",\n hatch=\"//\",\n )\n # Lecture visuelle: opaque = PC1, hachur\u00e9/translucide = PC2.\n", + "candidate_sha256": "aab9151c32a9184032f1d5cb8092e7e951262c5c208f6af603017ab2a386df19", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "family_weights_bar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n1 passed, 85 deselected in 0.78s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "family_weights_bar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:172: in test_family_weights_bar_and_donut_angles\n assert_allclose([p.get_height() for p in series[\"PC1\"]], [80, 20, 0])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.0 (ACTUAL), 80 (DESIRED)\nE [1]: 30.0 (ACTUAL), 20 (DESIRED)\nE [2]: 70.0 (ACTUAL), 0 (DESIRED)\nE Max absolute difference among violations: 80.\nE Max relative difference among violations: 1.\nE ACTUAL: array([ 0., 30., 70.])\nE DESIRED: array([80, 20, 0])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n__________________ test_family_weights_bar_and_donut_angles ___________________\ntests\\test_dimred_visualizer.py:172: in test_family_weights_bar_and_donut_angles\n assert_allclose([p.get_height() for p in series[\"PC1\"]], [80, 20, 0])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.0 (ACTUAL), 80 (DESIRED)\nE [1]: 30.0 (ACTUAL), 20 (DESIRED)\nE [2]: 70.0 (ACTUAL), 0 (DESIRED)\nE Max absolute difference among violations: 80.\nE Max relative difference among violations: 1.\nE ACTUAL: array([ 0., 30., 70.])\nE DESIRED: array([80, 20, 0])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_family_weights_bar_and_donut_angles\n1 failed, 85 deselected in 0.86s\n", + "stderr": "" + } + }, + { + "name": "N03", + "selection": "real_export_readable", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024 + ] + ], + "patch": "--- \n+++ \n@@ -1015,7 +1015,13 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ import pickle\n+ clone=pickle.loads(pickle.dumps(fig))\n+ for axis in clone.axes:\n+ for collection in list(axis.collections):\n+ collection.remove()\n+ clone.savefig(path,bbox_inches=\"tight\",dpi=self.dpi)\n+ plt.close(clone)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n", + "candidate_sha256": "fc72e8f8514911cc968fd57dee9b6fb78846d55c43c6ac4763aa2c96a77b1421", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n2 passed, 84 deselected in 1.18s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:685: in test_real_export_readable_and_same_semantic_figure\n visualizer_contracts.assert_png_matches_figure(path, fig, c.viz.dpi)\ntests\\visualizer_review_contracts.py:45: in assert_png_matches_figure\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=1\nE Exported scientific artists differ from the returned figure\nE Mismatched elements: 162 / 312700 (0.0518%)\nE First 5 mismatches are at indices:\nE [28, 127, 0]: 255 (ACTUAL), 250 (DESIRED)\nE [28, 127, 1]: 255 (ACTUAL), 251 (DESIRED)\nE [28, 127, 2]: 255 (ACTUAL), 252 (DESIRED)\nE [28, 128, 0]: 255 (ACTUAL), 214 (DESIRED)\nE [28, 128, 1]: 255 (ACTUAL), 223 (DESIRED)\nE Max absolute difference among violations: 125\nE Max relative difference among violations: 0.96153846\nE ACTUAL: array([[[255, 255, 255, 255],\nE [255, 255, 255, 255],\nE [255, 255, 255, 255],...\nE DESIRED: array([[[255, 255, 255, 255],\nE [255, 255, 255, 255],\nE [255, 255, 255, 255],..." + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024, + 1025, + 1031, + 1098, + 1171, + 1172, + 1222, + 1262, + 1267, + 1268, + 1269, + 1321, + 1358, + 1363, + 1477, + 1482, + 1603, + 1606, + 1607, + 1608, + 1645, + 1650, + 1778, + 1783, + 1784, + 1958, + 1962, + 1963, + 2009, + 2013, + 2014, + 2061, + 2068, + 2168, + 2172, + 2220, + 2225, + 2226, + 2227, + 2294, + 2299, + 2396, + 2401, + 2533, + 2539, + 2678, + 2683, + 2684, + 2807, + 2811, + 2869, + 2875, + 2876, + 2989, + 2992 + ], + "stdout": "F. [100%]\n================================== FAILURES ===================================\n___________ test_real_export_readable_and_same_semantic_figure[png] ___________\ntests\\test_dimred_visualizer.py:685: in test_real_export_readable_and_same_semantic_figure\n visualizer_contracts.assert_png_matches_figure(path, fig, c.viz.dpi)\ntests\\visualizer_review_contracts.py:45: in assert_png_matches_figure\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=1\nE Exported scientific artists differ from the returned figure\nE Mismatched elements: 162 / 312700 (0.0518%)\nE First 5 mismatches are at indices:\nE [28, 127, 0]: 255 (ACTUAL), 250 (DESIRED)\nE [28, 127, 1]: 255 (ACTUAL), 251 (DESIRED)\nE [28, 127, 2]: 255 (ACTUAL), 252 (DESIRED)\nE [28, 128, 0]: 255 (ACTUAL), 214 (DESIRED)\nE [28, 128, 1]: 255 (ACTUAL), 223 (DESIRED)\nE Max absolute difference among violations: 125\nE Max relative difference among violations: 0.96153846\nE ACTUAL: array([[[255, 255, 255, 255],\nE [255, 255, 255, 255],\nE [255, 255, 255, 255],...\nE DESIRED: array([[[255, 255, 255, 255],\nE [255, 255, 255, 255],\nE [255, 255, 255, 255],...\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_export_readable_and_same_semantic_figure[png]\n1 failed, 1 passed, 84 deselected in 1.36s\n", + "stderr": "" + } + }, + { + "name": "A_TRUST", + "selection": "real_sklearn_trustworthiness", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2233 + ] + ], + "patch": "--- \n+++ \n@@ -2230,7 +2230,7 @@\n rng = np.random.default_rng(42)\n n = min(n_subsample, len(X_ref))\n # Sous-\u00e9chantillonnage pour ma\u00eetriser le co\u00fbt de calcul T(k).\n- idx = rng.choice(len(X_ref), size=n, replace=False)\n+ idx = np.sort(rng.permutation(len(X_ref))[:n])\n X_sub = X_ref[idx]\n Zu_sub = Z_umap[idx]\n Zt_sub = Z_tsne[idx]\n", + "candidate_sha256": "fcc67a8362f6f40330e5d109e8e0851d1fe3ef3870d3986f40d225d1bf91f9c2", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n2 passed, 84 deselected in 2.76s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n2 passed, 84 deselected in 2.77s\n", + "stderr": "" + } + }, + { + "name": "AD14", + "selection": "trustworthiness_axis_contains", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2279, + 2280 + ] + ], + "patch": "--- \n+++ \n@@ -2276,7 +2276,8 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0.75,1.01)\n+ ax.text(.1,.1,f\"T(k) < 0.75 hors champ : min = {min(trust_t):.3f}\",transform=ax.transAxes)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n", + "candidate_sha256": "b226e92e6afab749ae6ab91b70733b47ccaf8995f634945d03935428180aa4ba", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:196: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:196: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\n1 failed, 85 deselected in 2.82s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2285, + 2289, + 2294, + 2391, + 2396, + 2528, + 2534, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n1 passed, 85 deselected in 2.66s\n", + "stderr": "" + } + }, + { + "name": "A_EXPORT", + "selection": "default_output_directory or real_export_readable", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1087 + ], + [ + 1249 + ] + ], + "patch": "--- \n+++ \n@@ -1084,9 +1084,7 @@\n \"Autoencodeur \u2014 Historique d'entra\u00eenement (LAMOST DR5)\", fontsize=13, y=1.02\n )\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_training_history\")\n return fig, axes\n \n def plot_ae_embedding(self, Z, meta, y, save_path=None):\n@@ -1248,9 +1246,7 @@\n ax.legend(fontsize=9)\n ax.grid(True, alpha=0.3)\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_ae_vs_pca\")\n return fig, ax\n \n def plot_latent_interpolation(\n", + "candidate_sha256": "03cd6fc36c4863b2d546a7b7a0986741434046b13d54c198a9eca3cf45e23b75", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_output_directory or real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1451/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1451/test_default_output_directory_1').glob" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1165, + 1166, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "..FF [100%]\n================================== FAILURES ===================================\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1451/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1451/test_default_output_directory_1').glob\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\n2 failed, 2 passed, 82 deselected in 1.90s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_output_directory or real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1010, + 1012, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1088, + 1090, + 1163, + 1164, + 1214, + 1216, + 1218, + 1219, + 1221, + 1222, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1231, + 1233, + 1234, + 1236, + 1238, + 1239, + 1240, + 1241, + 1243, + 1244, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1252, + 1257, + 1258, + 1259, + 1311, + 1348, + 1353, + 1467, + 1472, + 1593, + 1596, + 1597, + 1598, + 1635, + 1640, + 1768, + 1773, + 1774, + 1948, + 1952, + 1953, + 1999, + 2003, + 2004, + 2051, + 2058, + 2158, + 2162, + 2210, + 2215, + 2216, + 2217, + 2284, + 2289, + 2386, + 2391, + 2523, + 2529, + 2668, + 2673, + 2674, + 2797, + 2801, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n4 passed, 82 deselected in 2.53s\n", + "stderr": "" + } + }, + { + "name": "A_METHODS", + "selection": "synthesis_preserves", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2887 + ] + ], + "patch": "--- \n+++ \n@@ -2884,7 +2884,7 @@\n if Z_umap is not None:\n # UMAP est optionnel selon le notebook ex\u00e9cut\u00e9.\n METHODS.append((\"UMAP\", Z_umap, \"UMAP 1\", \"UMAP 2\"))\n- METHODS.append((\"Autoencodeur\", Z_ae, \"Latent 1\", \"Latent 2\"))\n+ METHODS.append((\"AE\", Z_ae, \"Latent 1\", \"Latent 2\"))\n \n PARAMS = [\n (\"Classe spectrale\", None, None),\n", + "candidate_sha256": "c262ecf582497b62b25e0ba2a89eb1c64108a95e763215442d6b610a19acc030", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n2 passed, 84 deselected in 1.02s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-1mr5il12\\result.xml -\n2 passed, 84 deselected in 0.98s\n", + "stderr": "" + } + } + ], + "executed_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/proofs_dimred_visualizer.py": "6fd1f1ed7d1cc5202f8835b3e32ab838d5c9df05754e11d524af05c744f1fbd3", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3" + } +} diff --git a/audit/m28_review_frozen_controls_results.json b/audit/m28_review_frozen_controls_results.json new file mode 100644 index 0000000..68761b0 --- /dev/null +++ b/audit/m28_review_frozen_controls_results.json @@ -0,0 +1,9944 @@ +{ + "active_head": "0c06cfd497579c5f99fd957c97ca28a052494bd4", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6" + }, + "mode": "proofs", + "runs": [ + { + "name": "C14_renderable_mathtext", + "method": "plot_eigenspectra", + "selection": "default_eigenspectrum", + "changed_lines": [ + 869, + 872 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "b3ea1715d05ad316ba907994cf51f603855f85e89009b7cc151e980a76481c6f", + "patch": "--- \n+++ \n@@ -869,7 +869,7 @@\n ax.text(\n lam,\n ymax * 0.88,\n- nom,\n+ nom.replace(chr(92)*2, chr(92)),\n rotation=90,\n fontsize=6,\n color=\"crimson\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_eigenspectrum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:432: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:437: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:432: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:437: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\n1 failed, 86 deselected in 1.97s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_eigenspectrum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n1 passed, 86 deselected in 1.01s\n", + "stderr": "" + } + }, + { + "name": "C01_equivalent_percent", + "method": "plot_variance_explained", + "selection": "real_pca_variance", + "changed_lines": [ + 154 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "8b74921a093af4f83f08890f592c4c0952217b3b46be509081ed8d56a050a69e", + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, 100 * ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n1 passed, 86 deselected in 2.88s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n1 passed, 86 deselected in 2.94s\n", + "stderr": "" + } + }, + { + "name": "C02_alternative_export", + "method": "_save", + "selection": "real_export_readable", + "changed_lines": [ + 1018 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "95ac85f7fbb81f0932ea60d4962a8d00b3eae4d5c2b4148589e17266f2a9d953", + "patch": "--- \n+++ \n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ fig.canvas.print_figure(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n2 passed, 85 deselected in 1.24s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n2 passed, 85 deselected in 1.23s\n", + "stderr": "" + } + }, + { + "name": "C03_alternative_palette", + "method": "plot_loadings_bar", + "selection": "signed_loadings", + "changed_lines": [ + 288 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c8833a129a116501b3ba962a48791953da763ac97fcf1c87d41ade0e8e6994f4", + "patch": "--- \n+++ \n@@ -285,7 +285,7 @@\n df = df.sort_values(\"loading\")\n \n # Couleur encodant le signe physique de la contribution.\n- colors = [\"#DD8452\" if v < 0 else \"#4C72B0\" for v in df[\"loading\"]]\n+ colors = [\"#CC5500\" if v < 0 else \"#0055CC\" for v in df[\"loading\"]]\n fig, ax = plt.subplots(figsize=(8, max(4, n_top * 0.35)), dpi=self.dpi)\n \n ax.barh(\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "signed_loadings", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n1 passed, 86 deselected in 0.98s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "signed_loadings", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n1 passed, 86 deselected in 0.92s\n", + "stderr": "" + } + }, + { + "name": "C04_explicit_alignment_refusal", + "method": "plot_ae_recon_by_spectral_type", + "selection": "reconstruction_cardinality", + "changed_lines": [ + 2536, + 2537, + 2538 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "7e93d1ce3f02ab35d08218ceb54010b192f74840f324818bf3788f4e7c52dfc4", + "patch": "--- \n+++ \n@@ -2533,6 +2533,8 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ if not (len(X) == len(X_recon) == len(spectral_types)):\n+ raise RuntimeError(\"Observation alignment: incompatible lengths\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:204: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:204: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\n1 failed, 86 deselected in 0.85s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2537, + 2674, + 2679, + 2680, + 2803, + 2807, + 2865, + 2871, + 2872, + 2985, + 2988 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n1 passed, 86 deselected in 0.62s\n", + "stderr": "" + } + }, + { + "name": "C05_gravity_units", + "method": "plot_hr_teff_regions", + "selection": "hr_region_vertices", + "changed_lines": [ + 3039, + 3057 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "552acec69a5400440601692a3036f2dfff766b4b46643f0d66fcc879c98696b7", + "patch": "--- \n+++ \n@@ -3054,7 +3054,7 @@\n MS_G_HOT + (MS_G_COOL - MS_G_HOT) * 0.35,\n ),\n (T_LO + (T_HI - T_LO) * 0.25, MS_G_COOL - 0.10),\n- (T_LO + T_PAD, G_HI - T_PAD * 2),\n+ (T_LO + T_PAD, G_HI - G_PAD * 2),\n (T_LO + T_PAD, G_HI - G_PAD),\n (T_LO + (T_HI - T_LO) * 0.20, MS_G_COOL + MS_W * 0.6),\n (\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 86 deselected in 1.17s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n1 passed, 86 deselected in 1.05s\n", + "stderr": "" + } + }, + { + "name": "C06_count_omitted", + "method": "plot_hr_teff_regions", + "selection": "hr_population_title", + "changed_lines": [ + 3213, + 3215 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "ed1ffd93182289c0629f048ccb0acfbb0860b292a686da314b2682e25ff8bc3d", + "patch": "--- \n+++ \n@@ -3212,7 +3212,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 population fournie\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002988426EC00>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000298C64C2EA0>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002988426EC00>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000298C64C2EA0>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\n2 failed, 85 deselected in 1.33s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n2 passed, 85 deselected in 1.17s\n", + "stderr": "" + } + }, + { + "name": "C07_small_errors_retained", + "method": "plot_ae_error_distribution_logscale", + "selection": "log_histogram_keeps", + "changed_lines": [ + 2823, + 2824 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "fc96d6a64f3b0e40da6bf7c8e281e7e7a0134e037c22c97456ffc5ee5fd55cdc", + "patch": "--- \n+++ \n@@ -2821,7 +2821,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(max(vals.min(), np.finfo(float).tiny)), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:343: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:343: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\n1 failed, 86 deselected in 1.36s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n1 passed, 86 deselected in 1.33s\n", + "stderr": "" + } + }, + { + "name": "C08_scalar_axes_supported", + "method": "plot_ae_embedding", + "selection": "no_physical_columns and plot_ae_embedding", + "changed_lines": [ + 1112, + 1113 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "9c7bb5270f973d9ab2eed8f781d84cbee44d923aa5b2d0d39a80a92d9a9400bb", + "patch": "--- \n+++ \n@@ -1109,6 +1109,7 @@\n \n PALETTE = {\"STAR\": \"#4C72B0\", \"GALAXY\": \"#DD8452\", \"QSO\": \"#55A868\"}\n MARKERS = {\"STAR\": \"o\", \"GALAXY\": \"s\", \"QSO\": \"^\"}\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_ae_embedding", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:250: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:250: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\n1 failed, 86 deselected in 0.91s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_ae_embedding", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1115, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1126, + 1128, + 1129, + 1130, + 1131, + 1133, + 1155, + 1156, + 1157, + 1158, + 1160, + 1161, + 1164, + 1166, + 1167, + 1217, + 1257, + 1262, + 1263, + 1264, + 1316, + 1353, + 1358, + 1472, + 1477, + 1598, + 1601, + 1602, + 1603, + 1640, + 1645, + 1773, + 1778, + 1779, + 1953, + 1957, + 1958, + 2004, + 2008, + 2009, + 2056, + 2063, + 2163, + 2167, + 2215, + 2220, + 2221, + 2222, + 2289, + 2294, + 2391, + 2396, + 2528, + 2534, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n1 passed, 86 deselected in 0.73s\n", + "stderr": "" + } + }, + { + "name": "C09_zoom_scalar_axes_supported", + "method": "plot_latent_zoomed", + "selection": "no_physical_columns and plot_latent_zoomed", + "changed_lines": [ + 2321, + 2322 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c3d12005048a8d692f607a4977148b4a708dcf18f570cbdb4bd3bf710e6347fa", + "patch": "--- \n+++ \n@@ -2318,6 +2318,7 @@\n ]\n \n fig, axes = plt.subplots(1, 1 + len(available), figsize=(22, 5), dpi=self.dpi)\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_latent_zoomed", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:251: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:251: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\n1 failed, 86 deselected in 0.89s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_latent_zoomed", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2324, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2335, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2343, + 2345, + 2381, + 2382, + 2384, + 2385, + 2387, + 2388, + 2389, + 2391, + 2396, + 2528, + 2534, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n1 passed, 86 deselected in 0.72s\n", + "stderr": "" + } + }, + { + "name": "C10_profile_single_slot", + "method": "plot_hdbscan_feature_profiles", + "selection": "cluster_profiles_unavailable and 1", + "changed_lines": [ + 2020 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "e56d76446680544910180a2a4f1e5d99b53d58361a1fff7f4980a2113d7c0ffb", + "patch": "--- \n+++ \n@@ -2017,7 +2017,7 @@\n ncols = 4\n nrows = (n_show + ncols - 1) // ncols\n fig, axes = plt.subplots(nrows, ncols, figsize=(5 * ncols, 4 * nrows), dpi=120)\n- axes_flat = axes.flatten() if n_show > 1 else [axes]\n+ axes_flat = np.asarray(axes).ravel()\n \n for ax_i, cid in zip(axes_flat, top_cids):\n profile = cluster_means.loc[cid]\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_profiles_unavailable and 1", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:271: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:270: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:271: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:270: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\n1 failed, 86 deselected in 0.91s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_profiles_unavailable and 1", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n1 passed, 86 deselected in 0.80s\n", + "stderr": "" + } + }, + { + "name": "C11_display_whole_trust_range", + "method": "plot_trustworthiness", + "selection": "trustworthiness_axis_contains", + "changed_lines": [ + 2279 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "ad1c94878e026d9ddc675825313ec1ed5709f1128675e1fe1487f0c7310149fc", + "patch": "--- \n+++ \n@@ -2276,7 +2276,7 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0, 1.01)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:202: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:202: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\n1 failed, 86 deselected in 2.81s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n1 passed, 86 deselected in 2.37s\n", + "stderr": "" + } + }, + { + "name": "C12_hide_unused_reconstructions", + "method": "plot_ae_reconstruction", + "selection": "more_reconstructions or reconstruction_drawn_rows", + "changed_lines": [ + 1179, + 1180, + 1181 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c80b84e92e07174091bbdc7418f60720c07530d8c68d7023c1a3961ee09beac6", + "patch": "--- \n+++ \n@@ -1176,6 +1176,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in axes[len(idx):]:\n+ unused.set_visible(False)\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions or reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "...F [100%]\n================================== FAILURES ===================================\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n1 failed, 3 passed, 83 deselected in 1.46s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions or reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1180, + 1181, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1196, + 1197, + 1198, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1210, + 1212, + 1213, + 1216, + 1218, + 1258, + 1263, + 1264, + 1265, + 1317, + 1354, + 1359, + 1473, + 1478, + 1599, + 1602, + 1603, + 1604, + 1641, + 1646, + 1774, + 1779, + 1780, + 1954, + 1958, + 1959, + 2005, + 2009, + 2010, + 2057, + 2064, + 2164, + 2168, + 2216, + 2221, + 2222, + 2223, + 2290, + 2295, + 2392, + 2397, + 2529, + 2535, + 2674, + 2679, + 2680, + 2803, + 2807, + 2865, + 2871, + 2872, + 2985, + 2988 + ], + "stdout": ".... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n4 passed, 83 deselected in 1.32s\n", + "stderr": "" + } + }, + { + "name": "F01_always_refuse_alignment", + "method": "plot_ae_recon_by_spectral_type", + "selection": "reconstruction_cardinality or spectral_type_means", + "changed_lines": [ + 2536, + 2537 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "e0e0abae314f5e5eb2996177d79dd93ed57a2e3f751236cfc0d37a00e3a0b195", + "patch": "--- \n+++ \n@@ -2533,6 +2533,7 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ raise RuntimeError(\"Observation alignment unavailable\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality or spectral_type_means", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:204: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".F [100%]\n================================== FAILURES ===================================\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:204: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\n1 failed, 1 passed, 85 deselected in 0.95s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality or spectral_type_means", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:329: in test_spectral_type_means_for_aligned_unequal_classes\n result = c.viz.plot_ae_recon_by_spectral_type(\nsrc\\dimred\\dimred_visualizer.py:2536: in plot_ae_recon_by_spectral_type\n raise RuntimeError(\"Observation alignment unavailable\")\nE RuntimeError: Observation alignment unavailable\n\nDuring handling of the above exception, another exception occurred:\ntests\\test_dimred_visualizer.py:333: in test_spectral_type_means_for_aligned_unequal_classes\n assert False, f\"Valid aligned reconstruction must remain usable: {exc}\"\nE AssertionError: Valid aligned reconstruction must remain usable: Observation alignment unavailable\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": "F. [100%]\n================================== FAILURES ===================================\n____________ test_spectral_type_means_for_aligned_unequal_classes _____________\ntests\\test_dimred_visualizer.py:329: in test_spectral_type_means_for_aligned_unequal_classes\n result = c.viz.plot_ae_recon_by_spectral_type(\nsrc\\dimred\\dimred_visualizer.py:2536: in plot_ae_recon_by_spectral_type\n raise RuntimeError(\"Observation alignment unavailable\")\nE RuntimeError: Observation alignment unavailable\n\nDuring handling of the above exception, another exception occurred:\ntests\\test_dimred_visualizer.py:333: in test_spectral_type_means_for_aligned_unequal_classes\n assert False, f\"Valid aligned reconstruction must remain usable: {exc}\"\nE AssertionError: Valid aligned reconstruction must remain usable: Observation alignment unavailable\nE assert False\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_spectral_type_means_for_aligned_unequal_classes\n1 failed, 1 passed, 85 deselected in 0.85s\n", + "stderr": "" + } + }, + { + "name": "F02_empty_hr", + "method": "plot_hr_teff_regions", + "selection": "hr_region_vertices", + "changed_lines": [ + 3160, + 3161 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "6bd35b2de52d08c61471145b27b92596e95f09e2266dd9e394fed28562632d61", + "patch": "--- \n+++ \n@@ -3157,6 +3157,7 @@\n cbar.ax.tick_params(labelsize=9)\n \n # \u2500\u2500 R\u00e9gions stellaires \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n+ REGIONS = []\n for region in REGIONS:\n patch = MplPolygon(\n np.array(region[\"poly\"]),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 86 deselected in 1.15s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:167: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert ax.patches, \"Valid HR regional figure must contain informative regions\"\nE AssertionError: Valid HR regional figure must contain informative regions\nE assert \nE + where = .patches" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3200, + 3204, + 3205, + 3206, + 3207, + 3209, + 3210, + 3212, + 3213, + 3214, + 3215, + 3217, + 3218, + 3220, + 3221, + 3223, + 3224 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:167: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert ax.patches, \"Valid HR regional figure must contain informative regions\"\nE AssertionError: Valid HR regional figure must contain informative regions\nE assert \nE + where = .patches\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 86 deselected in 1.14s\n", + "stderr": "" + } + }, + { + "name": "C13_integrated_kde_mass", + "method": "plot_latent_kde", + "selection": "kde_labeled_regions or real_kde_reproducible", + "changed_lines": [ + 2427, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "302fe10399fed0e6d61b3108c8095e46ad1f329d40eba152223be16efb5e5020", + "patch": "--- \n+++ \n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered) / ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass, p)]) for p in [.68, .95, .99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions or real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 1 passed, 81 deselected in 17.03s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions or real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "...... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n6 passed, 81 deselected in 28.14s\n", + "stderr": "" + } + }, + { + "name": "F03_normal_thresholds_for_every_kde", + "method": "plot_latent_kde", + "selection": "kde_labeled_regions", + "changed_lines": [ + 2433, + 2434, + 2435 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "a4009e917c5151559ea5006b33f0465c7f5ca163cfec14c0d5f29f3755c56b0b", + "patch": "--- \n+++ \n@@ -2430,24 +2430,7 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ levels = [(1-p)/(2*np.pi) for p in [.99, .95, .68]]\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 82 deselected in 16.52s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.04626727\nE Max relative difference among violations: 0.04673462\nE ACTUAL: array(0.943733)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.04998785\nE Max relative difference among violations: 0.05049278\nE ACTUAL: array(0.940012)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02752703\nE Max relative difference among violations: 0.02780508\nE ACTUAL: array(0.962473)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02209737\nE Max relative difference among violations: 0.02232058\nE ACTUAL: array(0.967903)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02727094\nE Max relative difference among violations: 0.0275464\nE ACTUAL: array(0.962729)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2435, + 2436, + 2437, + 2438, + 2440, + 2441, + 2442, + 2443, + 2446, + 2447, + 2448, + 2450, + 2451, + 2452, + 2454, + 2455, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2467, + 2468, + 2470, + 2471, + 2473, + 2474, + 2476, + 2478, + 2479, + 2480, + 2481, + 2482, + 2483, + 2484, + 2485, + 2486, + 2487, + 2488, + 2489, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2502, + 2503, + 2504, + 2506, + 2507, + 2508, + 2510, + 2516, + 2655, + 2660, + 2661, + 2784, + 2788, + 2846, + 2852, + 2853, + 2966, + 2969 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.04626727\nE Max relative difference among violations: 0.04673462\nE ACTUAL: array(0.943733)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.04998785\nE Max relative difference among violations: 0.05049278\nE ACTUAL: array(0.940012)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02752703\nE Max relative difference among violations: 0.02780508\nE ACTUAL: array(0.962473)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02209737\nE Max relative difference among violations: 0.02232058\nE ACTUAL: array(0.967903)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02727094\nE Max relative difference among violations: 0.0275464\nE ACTUAL: array(0.962729)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 82 deselected in 16.42s\n", + "stderr": "" + } + } + ], + "executed_files_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/proofs_dimred_visualizer.py": "6907249c50b205febac0e87ebdeb537dcd9d58ba7eadeaa4320cfd460a7ce1fb", + "tests/visualizer_review_contracts.py": "d0b744c8b12e6d7d22923691bcac15f5d03b00d946941cf641b124421a2767ea", + "tests/test_visualizer_review_contracts.py": "17163a01b61f7497d12e4c313e6870ac31c75314301323b07c76d30e0e3dbd9b" + }, + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000287DF2A3E60>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000288558FF3E0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:204: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:236: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:236: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:238: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000002885587E500>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:250: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:251: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:271: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:270: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:279: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:326: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:343: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:364: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1483/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1483/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:202: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:432: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:437: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]), array([0.04 , 0.09 , 0.1 , 4. , 4.06521739,\\n 4.13043478, 4.19565217, 4.26086957, 4.326086...48, 6.47826087, 6.54347826, 6.60869565, 6.67391304,\\n 6.73913043, 6.80434783, 6.86956522, 6.93478261, 7. ]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1199, + 1200, + 1201, + 1202, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FFFFFFFFFFFFFFF.FFFFFFFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000287DF2A3E60>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000288558FF3E0>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:204: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:236: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:236: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:238: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000002885587E500>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:250: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:251: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:271: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:270: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:279: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:326: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:343: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:364: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1483/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1483/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:202: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:432: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:437: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]), array([0.04 , 0.09 , 0.1 , 4. , 4.06521739,\\n 4.13043478, 4.19565217, 4.26086957, 4.326086...48, 6.47826087, 6.54347826, 6.60869565, 6.67391304,\\n 6.73913043, 6.80434783, 6.86956522, 6.93478261, 7. ]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-_5bu3rzl\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n25 failed, 1 passed in 25.07s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_review_frozen_mutations_results.json b/audit/m28_review_frozen_mutations_results.json new file mode 100644 index 0000000..cbe178c --- /dev/null +++ b/audit/m28_review_frozen_mutations_results.json @@ -0,0 +1,10088 @@ +{ + "active_head": "0c06cfd497579c5f99fd957c97ca28a052494bd4", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6" + }, + "mode": "mutations", + "runs": [ + { + "name": "M01_color_row_roll", + "method": "plot_embedding", + "selection": "embedding_exact_observation", + "changed_lines": [ + 528 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "fbb7900faa59e5ae27981ef362e9ee99e219001a78cd03f3f8854d4bd679b3e1", + "patch": "--- \n+++ \n@@ -525,7 +525,7 @@\n # Chaque classe est trac\u00e9e s\u00e9par\u00e9ment pour g\u00e9rer couleur + marqueur.\n classes = np.unique(y)\n for cls in classes:\n- mask = y == cls\n+ mask = np.roll(y == cls, 1)\n ax.scatter(\n Z[mask, 0],\n Z[mask, 1],\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "embedding_exact_observation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n3 passed, 58 deselected in 0.93s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "embedding_exact_observation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:47: in test_embedding_exact_observation_associations\n assert_array_equal(offsets(sc), c.Z[c.y == cls])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 41.0 (ACTUAL), 7.0 (DESIRED)\nE [0, 1]: 13.0 (ACTUAL), 31.0 (DESIRED)\nE Max absolute difference among violations: 34.\nE Max relative difference among violations: 4.85714286\nE ACTUAL: array([[41., 13.]])\nE DESIRED: array([[ 7., 31.]])" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F.. [100%]\n================================== FAILURES ===================================\n___________ test_embedding_exact_observation_associations[classes] ____________\ntests\\test_dimred_visualizer.py:47: in test_embedding_exact_observation_associations\n assert_array_equal(offsets(sc), c.Z[c.y == cls])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 41.0 (ACTUAL), 7.0 (DESIRED)\nE [0, 1]: 13.0 (ACTUAL), 31.0 (DESIRED)\nE Max absolute difference among violations: 34.\nE Max relative difference among violations: 4.85714286\nE ACTUAL: array([[41., 13.]])\nE DESIRED: array([[ 7., 31.]])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_embedding_exact_observation_associations[classes]\n1 failed, 2 passed, 58 deselected in 1.02s\n", + "stderr": "" + } + }, + { + "name": "M02_variance_units", + "method": "plot_variance_explained", + "selection": "real_pca_variance", + "changed_lines": [ + 154 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "0026e09d1cd7f509e47cea034e79cdff94c6037a4a7ceaaa50d0b42ae70b7fcf", + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n1 passed, 60 deselected in 2.87s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:117: in test_real_pca_variance_and_reconstruction_energy\n assert_allclose(heights(axes[0]), np.array([9, 4, 1]) / 14 * 100)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.6428571428571428 (ACTUAL), 64.28571428571429 (DESIRED)\nE [1]: 0.2857142857142857 (ACTUAL), 28.57142857142857 (DESIRED)\nE [2]: 0.07142857142857142 (ACTUAL), 7.142857142857142 (DESIRED)\nE Max absolute difference among violations: 63.64285714\nE Max relative difference among violations: 0.99\nE ACTUAL: array([0.642857, 0.285714, 0.071429])\nE DESIRED: array([64.285714, 28.571429, 7.142857])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______________ test_real_pca_variance_and_reconstruction_energy _______________\ntests\\test_dimred_visualizer.py:117: in test_real_pca_variance_and_reconstruction_energy\n assert_allclose(heights(axes[0]), np.array([9, 4, 1]) / 14 * 100)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.6428571428571428 (ACTUAL), 64.28571428571429 (DESIRED)\nE [1]: 0.2857142857142857 (ACTUAL), 28.57142857142857 (DESIRED)\nE [2]: 0.07142857142857142 (ACTUAL), 7.142857142857142 (DESIRED)\nE Max absolute difference among violations: 63.64285714\nE Max relative difference among violations: 0.99\nE ACTUAL: array([0.642857, 0.285714, 0.071429])\nE DESIRED: array([64.285714, 28.571429, 7.142857])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_pca_variance_and_reconstruction_energy\n1 failed, 60 deselected in 2.79s\n", + "stderr": "" + } + }, + { + "name": "M03_best_is_max", + "method": "plot_training_history", + "selection": "training_history_minimum", + "changed_lines": [ + 1048 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "be86a4cc9d42b00927f9f7478ce5938b3f78e432208053698595573184c30360", + "patch": "--- \n+++ \n@@ -1045,7 +1045,7 @@\n ax.plot(epochs, train_loss, color=\"#4C72B0\", lw=2, label=\"Train\")\n ax.plot(epochs, val_loss, color=\"#DD8452\", lw=2, ls=\"--\", label=\"Validation\")\n # Best epoch d\u00e9fini sur la val_loss minimale (crit\u00e8re de s\u00e9lection mod\u00e8le).\n- best_epoch = int(np.argmin(val_loss)) + 1\n+ best_epoch = int(np.argmax(val_loss)) + 1\n best_val = min(val_loss)\n ax.axvline(\n best_epoch,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "training_history_minimum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n2 passed, 59 deselected in 1.27s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "training_history_minimum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:238: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:238: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n____ test_training_history_minimum_is_not_last_and_distinct_series[False] _____\ntests\\test_dimred_visualizer.py:238: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])\n_____ test_training_history_minimum_is_not_last_and_distinct_series[True] _____\ntests\\test_dimred_visualizer.py:238: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_training_history_minimum_is_not_last_and_distinct_series[False]\nFAILED tests/test_dimred_visualizer.py::test_training_history_minimum_is_not_last_and_distinct_series[True]\n2 failed, 59 deselected in 1.45s\n", + "stderr": "" + } + }, + { + "name": "M04_family_median", + "method": "plot_ae_error_by_family", + "selection": "error_family_mean", + "changed_lines": [ + 2740, + 2742 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "0c1e0f746f1208318c3a41311cf26ca2247439221e86b8fb26a7f94c2d6ca839", + "patch": "--- \n+++ \n@@ -2739,7 +2739,7 @@\n # Agr\u00e9gation par famille pour r\u00e9sum\u00e9 interpr\u00e9table.\n df_fam = (\n df_feat_mse.groupby(\"family\")[\"mse\"]\n- .agg([\"mean\", \"std\", \"count\"])\n+ .agg([\"median\", \"std\", \"count\"]).rename(columns={\"median\": \"mean\"})\n .rename(columns={\"mean\": \"mse_mean\", \"std\": \"mse_std\", \"count\": \"n_feats\"})\n .reset_index()\n .sort_values(\"mse_mean\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "error_family_mean", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n1 passed, 60 deselected in 0.77s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "error_family_mean", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:313: in test_error_family_mean_is_feature_weighted_and_std_is_between_features\n assert_allclose(widths(axes[0]), [2.5, 50 / 3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 2 (50%)\nE Mismatch at index:\nE [1]: 16.0 (ACTUAL), 16.666666666666668 (DESIRED)\nE Max absolute difference among violations: 0.66666667\nE Max relative difference among violations: 0.04\nE ACTUAL: array([ 2.5, 16. ])\nE DESIRED: array([ 2.5 , 16.666667])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n___ test_error_family_mean_is_feature_weighted_and_std_is_between_features ____\ntests\\test_dimred_visualizer.py:313: in test_error_family_mean_is_feature_weighted_and_std_is_between_features\n assert_allclose(widths(axes[0]), [2.5, 50 / 3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 2 (50%)\nE Mismatch at index:\nE [1]: 16.0 (ACTUAL), 16.666666666666668 (DESIRED)\nE Max absolute difference among violations: 0.66666667\nE Max relative difference among violations: 0.04\nE ACTUAL: array([ 2.5, 16. ])\nE DESIRED: array([ 2.5 , 16.666667])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_error_family_mean_is_feature_weighted_and_std_is_between_features\n1 failed, 60 deselected in 0.95s\n", + "stderr": "" + } + }, + { + "name": "M05_ae_as_pca", + "method": "plot_ae_vs_pca", + "selection": "ae_pca_comparison", + "changed_lines": [ + 1235, + 1236 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "4490d68bd49df52e8e3e33fcd3f3deb6afafc15b43d98456789b3a77da97d69c", + "patch": "--- \n+++ \n@@ -1233,7 +1233,7 @@\n for _, row in ae_df.iterrows():\n # Chaque AE est repr\u00e9sent\u00e9 par une ligne horizontale de performance.\n ax.axhline(\n- row[\"mse_mean\"], color=\"#DD8452\", ls=\"--\", lw=2, label=row[\"method\"]\n+ pca_df[\"mse_mean\"].iloc[0], color=\"#DD8452\", ls=\"--\", lw=2, label=row[\"method\"]\n )\n ax.annotate(\n # Position d'annotation choisie pour rester lisible sur la courbe PCA.\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "ae_pca_comparison", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n1 passed, 60 deselected in 0.72s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "ae_pca_comparison", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:273: in test_ae_pca_comparison_does_not_substitute_metrics\n assert_allclose(ax.lines[1].get_ydata(), [0.17, 0.17])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE [1]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE Max absolute difference among violations: 0.73\nE Max relative difference among violations: 4.29411765\nE ACTUAL: array([0.9, 0.9])\nE DESIRED: array([0.17, 0.17])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_____________ test_ae_pca_comparison_does_not_substitute_metrics ______________\ntests\\test_dimred_visualizer.py:273: in test_ae_pca_comparison_does_not_substitute_metrics\n assert_allclose(ax.lines[1].get_ydata(), [0.17, 0.17])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE [1]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE Max absolute difference among violations: 0.73\nE Max relative difference among violations: 4.29411765\nE ACTUAL: array([0.9, 0.9])\nE DESIRED: array([0.17, 0.17])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_ae_pca_comparison_does_not_substitute_metrics\n1 failed, 60 deselected in 0.88s\n", + "stderr": "" + } + }, + { + "name": "M06_identity_reconstruction", + "method": "plot_ae_reconstruction", + "selection": "reconstruction_drawn_rows", + "changed_lines": [ + 1182 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "9d374b178f5f5ea7f05df0b08d34b31f12680c59bb26223a5818b649832fa9f4", + "patch": "--- \n+++ \n@@ -1179,7 +1179,7 @@\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n- recon = X_recon[si]\n+ recon = X[si]\n mse_i = float(np.mean((orig - recon) ** 2))\n ax.plot(x_pos, orig, color=\"#4C72B0\", lw=1.5, alpha=0.9, label=\"Original\")\n ax.plot(\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n3 passed, 58 deselected in 1.19s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:254: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 11.0 (ACTUAL), 12.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 4.0 (DESIRED)\nE Max absolute difference among violations: 2.\nE Max relative difference among violations: 0.5\nE ACTUAL: array([11., 2.])\nE DESIRED: array([12., 4.])" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:254: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 25.0 (DESIRED)\nE [1]: 43.0 (ACTUAL), 55.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.24\nE ACTUAL: array([19., 43.])\nE DESIRED: array([25., 55.])" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:254: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 3.0 (ACTUAL), 5.0 (DESIRED)\nE [1]: 17.0 (ACTUAL), 21.0 (DESIRED)\nE Max absolute difference among violations: 4.\nE Max relative difference among violations: 0.4\nE ACTUAL: array([ 3., 17.])\nE DESIRED: array([ 5., 21.])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFF [100%]\n================================== FAILURES ===================================\n______________ test_reconstruction_drawn_rows_and_manual_mse[1] _______________\ntests\\test_dimred_visualizer.py:254: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 11.0 (ACTUAL), 12.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 4.0 (DESIRED)\nE Max absolute difference among violations: 2.\nE Max relative difference among violations: 0.5\nE ACTUAL: array([11., 2.])\nE DESIRED: array([12., 4.])\n______________ test_reconstruction_drawn_rows_and_manual_mse[3] _______________\ntests\\test_dimred_visualizer.py:254: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 25.0 (DESIRED)\nE [1]: 43.0 (ACTUAL), 55.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.24\nE ACTUAL: array([19., 43.])\nE DESIRED: array([25., 55.])\n______________ test_reconstruction_drawn_rows_and_manual_mse[6] _______________\ntests\\test_dimred_visualizer.py:254: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 3.0 (ACTUAL), 5.0 (DESIRED)\nE [1]: 17.0 (ACTUAL), 21.0 (DESIRED)\nE Max absolute difference among violations: 4.\nE Max relative difference among violations: 0.4\nE ACTUAL: array([ 3., 17.])\nE DESIRED: array([ 5., 21.])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_reconstruction_drawn_rows_and_manual_mse[1]\nFAILED tests/test_dimred_visualizer.py::test_reconstruction_drawn_rows_and_manual_mse[3]\nFAILED tests/test_dimred_visualizer.py::test_reconstruction_drawn_rows_and_manual_mse[6]\n3 failed, 58 deselected in 1.38s\n", + "stderr": "" + } + }, + { + "name": "M07_hr_color_roll", + "method": "plot_hr_diagram_embedding", + "selection": "hr_finite_triplets", + "changed_lines": [ + 920, + 923 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "9747542c8f796dcfe2334714186a9d2f1f6a2e0de7604ec1c1feb5eddbce86b4", + "patch": "--- \n+++ \n@@ -920,7 +920,7 @@\n sc = ax.scatter(\n teff[valid],\n logg[valid],\n- c=z_coord[valid],\n+ c=np.roll(z_coord[valid], 1),\n cmap=self.cmap_continuous,\n s=2,\n alpha=0.5,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "hr_finite_triplets", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 907, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n2 passed, 59 deselected in 1.05s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "hr_finite_triplets", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:97: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 11.0 (DESIRED)\nE [1]: 11.0 (ACTUAL), 23.0 (DESIRED)\nE [2]: 23.0 (ACTUAL), 19.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.72727273\nE ACTUAL: MaskedArray([19., 11., 23.])\nE DESIRED: array([11., 23., 19.])" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:97: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 43.0 (ACTUAL), 2.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 5.0 (DESIRED)\nE [2]: 5.0 (ACTUAL), 43.0 (DESIRED)\nE Max absolute difference among violations: 41.\nE Max relative difference among violations: 20.5\nE ACTUAL: MaskedArray([43., 2., 5.])\nE DESIRED: array([ 2., 5., 43.])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 907, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________________ test_hr_finite_triplets_and_physical_axes[0] _________________\ntests\\test_dimred_visualizer.py:97: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 11.0 (DESIRED)\nE [1]: 11.0 (ACTUAL), 23.0 (DESIRED)\nE [2]: 23.0 (ACTUAL), 19.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.72727273\nE ACTUAL: MaskedArray([19., 11., 23.])\nE DESIRED: array([11., 23., 19.])\n________________ test_hr_finite_triplets_and_physical_axes[1] _________________\ntests\\test_dimred_visualizer.py:97: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 43.0 (ACTUAL), 2.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 5.0 (DESIRED)\nE [2]: 5.0 (ACTUAL), 43.0 (DESIRED)\nE Max absolute difference among violations: 41.\nE Max relative difference among violations: 20.5\nE ACTUAL: MaskedArray([43., 2., 5.])\nE DESIRED: array([ 2., 5., 43.])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_hr_finite_triplets_and_physical_axes[0]\nFAILED tests/test_dimred_visualizer.py::test_hr_finite_triplets_and_physical_axes[1]\n2 failed, 59 deselected in 1.26s\n", + "stderr": "" + } + }, + { + "name": "M08_cluster_colors", + "method": "plot_hdbscan_clusters", + "selection": "real_analyzer_state", + "changed_lines": [ + 1390, + 1393 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "4c7322cb7de655cb5ea317a71b8cec2ec4de336c2e1866b9f78c378a3ae00a1b", + "patch": "--- \n+++ \n@@ -1390,7 +1390,7 @@\n ax.scatter(\n Z[mask, 0],\n Z[mask, 1],\n- c=[color_map[cid]],\n+ c=[color_map[cluster_ids[-1]]],\n s=2,\n alpha=0.75,\n rasterized=True,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n3 passed, 58 deselected in 1.16s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:397: in test_hdbscan_real_analyzer_state_and_point_populations\n assert_allclose(sc.get_facecolors()[0, :3], hdb.color_map_[cid][:3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F.. [100%]\n================================== FAILURES ===================================\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels0] _______\ntests\\test_dimred_visualizer.py:397: in test_hdbscan_real_analyzer_state_and_point_populations\n assert_allclose(sc.get_facecolors()[0, :3], hdb.color_map_[cid][:3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels0]\n1 failed, 2 passed, 58 deselected in 1.29s\n", + "stderr": "" + } + }, + { + "name": "M09_tsne_as_umap", + "method": "plot_trustworthiness", + "selection": "real_sklearn_trustworthiness", + "changed_lines": [ + 2244 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "219f76a998ddc435edb3c68374e089462acdda0d735e2384192c4c04d16aab75", + "patch": "--- \n+++ \n@@ -2241,7 +2241,7 @@\n with warnings.catch_warnings():\n warnings.simplefilter(\"ignore\")\n tu = trustworthiness(X_sub, Zu_sub, n_neighbors=k, metric=\"euclidean\")\n- tt = trustworthiness(X_sub, Zt_sub, n_neighbors=k, metric=\"euclidean\")\n+ tt = trustworthiness(X_sub, Zu_sub, n_neighbors=k, metric=\"euclidean\")\n # Stocke T(k) pour les deux m\u00e9thodes afin de tracer la courbe comparative.\n trust_u.append(tu)\n trust_t.append(tt)\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n2 passed, 59 deselected in 3.18s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 24 / 24 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -1.14005850694597 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 0.8518760376374508 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: -0.9468537822225308 (ACTUAL), -0.6451940968015629 (DESIRED)\nE [1, 1]: -0.2999476978380483 (ACTUAL), 0.0825255266666682 (DESIRED)\nE [2, 0]: 0.7540394717615756 (ACTUAL), -0.11873997633083841 (DESIRED)\nE Max absolute difference among violations: 3.39499489\nE Max relative difference among violations: 13.23342732\nE ACTUAL: array([[-1.140059, 0.851876],\nE [-0.946854, -0.299948],\nE [ 0.754039, 1.994789],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-0.645194, 0.082526],\nE [-0.11874 , -1.400206],..." + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 18 / 18 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -1.14005850694597 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 0.8518760376374508 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: -1.215555026777933 (ACTUAL), -1.0861640144823521 (DESIRED)\nE [1, 1]: 0.13882201829008786 (ACTUAL), -0.5693158913378338 (DESIRED)\nE [2, 0]: -0.13429338949088465 (ACTUAL), -1.215555026777933 (DESIRED)\nE Max absolute difference among violations: 3.39499489\nE Max relative difference among violations: 7.48292869\nE ACTUAL: array([[-1.140059, 0.851876],\nE [-1.215555, 0.138822],\nE [-0.134293, 1.177617],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-1.086164, -0.569316],\nE [-1.215555, 0.138822],..." + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[12] ________\ntests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 24 / 24 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -1.14005850694597 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 0.8518760376374508 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: -0.9468537822225308 (ACTUAL), -0.6451940968015629 (DESIRED)\nE [1, 1]: -0.2999476978380483 (ACTUAL), 0.0825255266666682 (DESIRED)\nE [2, 0]: 0.7540394717615756 (ACTUAL), -0.11873997633083841 (DESIRED)\nE Max absolute difference among violations: 3.39499489\nE Max relative difference among violations: 13.23342732\nE ACTUAL: array([[-1.140059, 0.851876],\nE [-0.946854, -0.299948],\nE [ 0.754039, 1.994789],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-0.645194, 0.082526],\nE [-0.11874 , -1.400206],...\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[9] _________\ntests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 18 / 18 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -1.14005850694597 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 0.8518760376374508 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: -1.215555026777933 (ACTUAL), -1.0861640144823521 (DESIRED)\nE [1, 1]: 0.13882201829008786 (ACTUAL), -0.5693158913378338 (DESIRED)\nE [2, 0]: -0.13429338949088465 (ACTUAL), -1.215555026777933 (DESIRED)\nE Max absolute difference among violations: 3.39499489\nE Max relative difference among violations: 7.48292869\nE ACTUAL: array([[-1.140059, 0.851876],\nE [-1.215555, 0.138822],\nE [-0.134293, 1.177617],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-1.086164, -0.569316],\nE [-1.215555, 0.138822],...\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[12]\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[9]\n2 failed, 59 deselected in 3.03s\n", + "stderr": "" + } + }, + { + "name": "M10_confidence_constant", + "method": "plot_xgboost_umap", + "selection": "xgboost_classes_confidence", + "changed_lines": [ + 2095, + 2098 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "f1bb69629105b2443c7a96086390fc68bde21d1e395b2ea7129ac0dae024f231", + "patch": "--- \n+++ \n@@ -2095,7 +2095,7 @@\n sc = ax.scatter(\n Z_umap_aligned[:, 0],\n Z_umap_aligned[:, 1],\n- c=confidence,\n+ c=np.ones(len(confidence)),\n cmap=\"RdYlGn\",\n vmin=0.4,\n vmax=1.0,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n2 passed, 59 deselected in 0.99s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:518: in test_xgboost_classes_confidence_and_cluster_associations\n assert_array_equal(axes[1].collections[0].get_array(), confidence)\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 6 / 6 (100%)\nE First 5 mismatches are at indices:\nE [0]: 1.0 (ACTUAL), 0.45 (DESIRED)\nE [1]: 1.0 (ACTUAL), 0.7 (DESIRED)\nE [2]: 1.0 (ACTUAL), 0.95 (DESIRED)\nE [3]: 1.0 (ACTUAL), 0.6 (DESIRED)\nE [4]: 1.0 (ACTUAL), 0.8 (DESIRED)\nE Max absolute difference among violations: 0.55\nE Max relative difference among violations: 1.22222222\nE ACTUAL: MaskedArray([1., 1., 1., 1., 1., 1.])\nE DESIRED: array([0.45, 0.7 , 0.95, 0.6 , 0.8 , 0.5 ])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".F [100%]\n================================== FAILURES ===================================\n____ test_xgboost_classes_confidence_and_cluster_associations[confidence1] ____\ntests\\test_dimred_visualizer.py:518: in test_xgboost_classes_confidence_and_cluster_associations\n assert_array_equal(axes[1].collections[0].get_array(), confidence)\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 6 / 6 (100%)\nE First 5 mismatches are at indices:\nE [0]: 1.0 (ACTUAL), 0.45 (DESIRED)\nE [1]: 1.0 (ACTUAL), 0.7 (DESIRED)\nE [2]: 1.0 (ACTUAL), 0.95 (DESIRED)\nE [3]: 1.0 (ACTUAL), 0.6 (DESIRED)\nE [4]: 1.0 (ACTUAL), 0.8 (DESIRED)\nE Max absolute difference among violations: 0.55\nE Max relative difference among violations: 1.22222222\nE ACTUAL: MaskedArray([1., 1., 1., 1., 1., 1.])\nE DESIRED: array([0.45, 0.7 , 0.95, 0.6 , 0.8 , 0.5 ])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_xgboost_classes_confidence_and_cluster_associations[confidence1]\n1 failed, 1 passed, 59 deselected in 1.18s\n", + "stderr": "" + } + }, + { + "name": "M11_synthesis_ae_as_pca", + "method": "plot_synthesis_grid", + "selection": "synthesis_preserves", + "changed_lines": [ + 2887 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "4f007fdb7dcae0839188918aad4eb9f77662409d9c1413989ff8d3ddeed36082", + "patch": "--- \n+++ \n@@ -2884,7 +2884,7 @@\n if Z_umap is not None:\n # UMAP est optionnel selon le notebook ex\u00e9cut\u00e9.\n METHODS.append((\"UMAP\", Z_umap, \"UMAP 1\", \"UMAP 2\"))\n- METHODS.append((\"Autoencodeur\", Z_ae, \"Latent 1\", \"Latent 2\"))\n+ METHODS.append((\"Autoencodeur\", scores_pca, \"Latent 1\", \"Latent 2\"))\n \n PARAMS = [\n (\"Classe spectrale\", None, None),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n2 passed, 59 deselected in 0.97s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:662: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:662: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[False] ___\ntests\\test_dimred_visualizer.py:662: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[True] ____\ntests\\test_dimred_visualizer.py:662: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]\n2 failed, 59 deselected in 1.14s\n", + "stderr": "" + } + }, + { + "name": "M12_stability_median", + "method": "plot_stability", + "selection": "stability_producer", + "changed_lines": [ + 740, + 744 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "c521e47969b0df802a97ecf521f45fca1a471bac3804187362b0ac01038a728f", + "patch": "--- \n+++ \n@@ -741,7 +741,7 @@\n 0.98,\n 0.97,\n # Convention actuelle: on exclut souvent seed de r\u00e9f\u00e9rence (index 0) de la moyenne.\n- f\"Moyenne : {dists[1:].mean():.4f}\" if len(dists) > 1 else \"\",\n+ f\"Moyenne : {np.median(dists[1:]):.4f}\" if len(dists) > 1 else \"\",\n transform=ax.transAxes,\n ha=\"right\",\n va=\"top\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "stability_producer", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n1 passed, 60 deselected in 1.10s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "stability_producer", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:632: in test_stability_producer_order_and_mean_without_reference\n assert f\"{expected:.4f}\" in text(ax)\nE assert '0.0120' in 'Moyenne : 0.0057'\nE + where 'Moyenne : 0.0057' = text()" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n__________ test_stability_producer_order_and_mean_without_reference ___________\ntests\\test_dimred_visualizer.py:632: in test_stability_producer_order_and_mean_without_reference\n assert f\"{expected:.4f}\" in text(ax)\nE assert '0.0120' in 'Moyenne : 0.0057'\nE + where 'Moyenne : 0.0057' = text()\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_stability_producer_order_and_mean_without_reference\n1 failed, 60 deselected in 1.25s\n", + "stderr": "" + } + }, + { + "name": "M13_profile_sign_erased", + "method": "plot_hdbscan_feature_profiles", + "selection": "profiles_signed_top", + "changed_lines": [ + 2026 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "91e32e38df5eeff868d93e08f22bde30dfd975fd423fe2b1a239a738d636a7cc", + "patch": "--- \n+++ \n@@ -2023,7 +2023,7 @@\n profile = cluster_means.loc[cid]\n # Top-5 par amplitude absolue (exc\u00e8s ou d\u00e9ficit).\n top5 = profile.abs().nlargest(5).index.tolist()\n- vals = profile[top5].values\n+ vals = np.abs(profile[top5].values)\n colors = [\"#C0392B\" if v > 0 else \"#2980B9\" for v in vals]\n labels = [\n f.replace(\"feature_\", \"\").replace(\"_eq_width\", \"\\nEW\")[:14]\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "profiles_signed_top", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n1 passed, 60 deselected in 0.75s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "profiles_signed_top", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:489: in test_cluster_profiles_signed_top_five_not_first_five\n assert_allclose(widths(axes[0]), [2, 0.9, -0.6, 0.4, -0.1])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 5 (40%)\nE Mismatch at indices:\nE [2]: 0.6 (ACTUAL), -0.6 (DESIRED)\nE [4]: 0.1 (ACTUAL), -0.1 (DESIRED)\nE Max absolute difference among violations: 1.2\nE Max relative difference among violations: 2.\nE ACTUAL: array([2. , 0.9, 0.6, 0.4, 0.1])\nE DESIRED: array([ 2. , 0.9, -0.6, 0.4, -0.1])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_cluster_profiles_signed_top_five_not_first_five _____________\ntests\\test_dimred_visualizer.py:489: in test_cluster_profiles_signed_top_five_not_first_five\n assert_allclose(widths(axes[0]), [2, 0.9, -0.6, 0.4, -0.1])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 5 (40%)\nE Mismatch at indices:\nE [2]: 0.6 (ACTUAL), -0.6 (DESIRED)\nE [4]: 0.1 (ACTUAL), -0.1 (DESIRED)\nE Max absolute difference among violations: 1.2\nE Max relative difference among violations: 2.\nE ACTUAL: array([2. , 0.9, 0.6, 0.4, 0.1])\nE DESIRED: array([ 2. , 0.9, -0.6, 0.4, -0.1])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_cluster_profiles_signed_top_five_not_first_five\n1 failed, 60 deselected in 0.91s\n", + "stderr": "" + } + }, + { + "name": "M14_density_wrong_population", + "method": "plot_ae_error_distribution", + "selection": "histogram_densities", + "changed_lines": [ + 1324, + 1329 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "d5407d955fea773baff307002def63203823044aaeb4696dac2eed4d256b0523", + "patch": "--- \n+++ \n@@ -1326,7 +1326,7 @@\n bins=60,\n alpha=0.55,\n color=color,\n- density=True,\n+ density=False,\n label=f\"{cls} (n={mask.sum()}, \u03bc={vals.mean():.4f})\",\n )\n # M\u00e9diane trac\u00e9e pour robuste comparaison inter-classes.\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "histogram_densities", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n1 passed, 60 deselected in 1.63s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "histogram_densities", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:355: in test_histogram_densities_integrate_and_class_mean_median_are_distinct\n assert_allclose(sum(p.get_width() * p.get_height() for p in container), 1)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98333333\nE Max relative difference among violations: 0.98333333\nE ACTUAL: array(0.016667)\nE DESIRED: array(1)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____ test_histogram_densities_integrate_and_class_mean_median_are_distinct ____\ntests\\test_dimred_visualizer.py:355: in test_histogram_densities_integrate_and_class_mean_median_are_distinct\n assert_allclose(sum(p.get_width() * p.get_height() for p in container), 1)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98333333\nE Max relative difference among violations: 0.98333333\nE ACTUAL: array(0.016667)\nE DESIRED: array(1)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_histogram_densities_integrate_and_class_mean_median_are_distinct\n1 failed, 60 deselected in 1.04s\n", + "stderr": "" + } + }, + { + "name": "M15_kde_wrong_population", + "method": "plot_latent_kde", + "selection": "real_kde_reproducible", + "changed_lines": [ + 2401 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "91bfc71fabb5fb950157bfc2ac827c4aab3d866ca76c10d44bbf20516aa17911", + "patch": "--- \n+++ \n@@ -2398,7 +2398,7 @@\n from scipy.stats import gaussian_kde\n \n # KDE restreint \u00e0 la population stellaire pour une lecture astrophysique propre.\n- star_mask = y == \"STAR\"\n+ star_mask = np.ones(len(y), dtype=bool)\n Z_stars = Z_ae[star_mask]\n teff_s = (\n meta[\"teff_gspphot\"].values[star_mask].astype(float)\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n1 passed, 60 deselected in 2.47s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:731: in test_real_kde_reproducible_star_selection_and_observation_colors\n assert len(actual) == 119\nE assert 139 == 119\nE + where 139 = len(array([[ 1.46143263e+00, 5.04194549e-01],\\n [-1.58198440e-01, -4.02871589e-01],\\n [-5.12655840e-01, 8.0166....62051618e-01, -1.22073795e+00],\\n [-2.43641605e-01, -8.00208551e-01],\\n [-1.00969481e+00, 6.69136452e-01]]))" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_real_kde_reproducible_star_selection_and_observation_colors _______\ntests\\test_dimred_visualizer.py:731: in test_real_kde_reproducible_star_selection_and_observation_colors\n assert len(actual) == 119\nE assert 139 == 119\nE + where 139 = len(array([[ 1.46143263e+00, 5.04194549e-01],\\n [-1.58198440e-01, -4.02871589e-01],\\n [-5.12655840e-01, 8.0166....62051618e-01, -1.22073795e+00],\\n [-2.43641605e-01, -8.00208551e-01],\\n [-1.00969481e+00, 6.69136452e-01]]))\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_kde_reproducible_star_selection_and_observation_colors\n1 failed, 60 deselected in 2.47s\n", + "stderr": "" + } + }, + { + "name": "M16_export_blank_figure", + "method": "_save", + "selection": "real_export_readable", + "changed_lines": [ + 1018 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "c686947be404c32bf911a0cff410356af8ec385c229db14da4dc8ed8823359f1", + "patch": "--- \n+++ \n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ plt.figure().savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n2 passed, 59 deselected in 1.24s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:684: in test_real_export_readable_and_same_semantic_figure\n assert pixels.shape[0] > 100 and pixels.std() > 1\nE assert (250 > 100 and np.float64(0.0) > 1)\nE + where np.float64(0.0) = ()\nE + where = array([[[255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255],\\n ...,\\n [255, 255, 255],\\n ... ...,\\n [255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255]]], shape=(250, 330, 3), dtype=uint8).std" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F. [100%]\n================================== FAILURES ===================================\n___________ test_real_export_readable_and_same_semantic_figure[png] ___________\ntests\\test_dimred_visualizer.py:684: in test_real_export_readable_and_same_semantic_figure\n assert pixels.shape[0] > 100 and pixels.std() > 1\nE assert (250 > 100 and np.float64(0.0) > 1)\nE + where np.float64(0.0) = ()\nE + where = array([[[255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255],\\n ...,\\n [255, 255, 255],\\n ... ...,\\n [255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255]]], shape=(250, 330, 3), dtype=uint8).std\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_export_readable_and_same_semantic_figure[png]\n1 failed, 1 passed, 59 deselected in 1.21s\n", + "stderr": "" + } + } + ], + "executed_files_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/proofs_dimred_visualizer.py": "6907249c50b205febac0e87ebdeb537dcd9d58ba7eadeaa4320cfd460a7ce1fb", + "tests/visualizer_review_contracts.py": "d0b744c8b12e6d7d22923691bcac15f5d03b00d946941cf641b124421a2767ea", + "tests/test_visualizer_review_contracts.py": "17163a01b61f7497d12e4c313e6870ac31c75314301323b07c76d30e0e3dbd9b" + }, + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_disclosure_identifies_the_relevant_exclusion_bound", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "............................................................. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ptmmbbe5\\result.xml -\n61 passed in 17.56s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_review_frozen_order_results.json b/audit/m28_review_frozen_order_results.json new file mode 100644 index 0000000..10ab474 --- /dev/null +++ b/audit/m28_review_frozen_order_results.json @@ -0,0 +1,107 @@ +{ + "active_head": "0c06cfd497579c5f99fd957c97ca28a052494bd4", + "commands": [ + { + "mode": "reverse", + "seed": 7, + "plugin": "def pytest_collection_modifyitems(items):\n items.reverse()\n", + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "-p", + "m28_order" + ], + "exit_code": 0, + "stdout": "........................................................................ [ 10%]\n........................................................................ [ 20%]\n........................................................................ [ 31%]\n........................................................................ [ 41%]\n........................................................................ [ 51%]\n........................................................................ [ 62%]\n........................................................................ [ 72%]\n........................................................................ [ 83%]\n........................................................................ [ 93%]\n............................................. [100%]\n============================== warnings summary ===============================\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_transient_failure_retries_then_succeeds\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_retry_limit_raises_or_falls_back_by_mode\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_cone_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_bulk_without_matches_stops_auto_fallback\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_partial_esa_supplement_merges_without_losing_xmatch_rows\n C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\tools\\gaia_crossmatcher.py:1210: Pandas4Warning: The inplace keyword in DataFrame.drop is deprecated and will be removed in a future version (PDEP-8).\n See https://pandas.pydata.org/docs/dev/whatsnew/v3.1.0.html#deprecation-inplace for more details.\n df_merged.drop(columns=[\"objid\"], inplace=True, errors=\"ignore\")\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n693 passed, 62 deselected, 7 warnings in 23.42s\n", + "stderr": "" + }, + { + "mode": "reverse", + "seed": 7, + "plugin": "def pytest_collection_modifyitems(items):\n items.reverse()\n", + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "-p", + "m28_order", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-W", + "error" + ], + "exit_code": 0, + "stdout": "............................................................. [100%]\n61 passed in 8.08s\n", + "stderr": "" + }, + { + "mode": "shuffle", + "seed": 3, + "plugin": "import random\ndef pytest_collection_modifyitems(items):\n random.Random(3).shuffle(items)\n", + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "-p", + "m28_order", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-W", + "error" + ], + "exit_code": 0, + "stdout": "............................................................. [100%]\n61 passed in 8.35s\n", + "stderr": "" + }, + { + "mode": "shuffle", + "seed": 11, + "plugin": "import random\ndef pytest_collection_modifyitems(items):\n random.Random(11).shuffle(items)\n", + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "-p", + "m28_order", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-W", + "error" + ], + "exit_code": 0, + "stdout": "............................................................. [100%]\n61 passed in 8.06s\n", + "stderr": "" + }, + { + "mode": "shuffle", + "seed": 29, + "plugin": "import random\ndef pytest_collection_modifyitems(items):\n random.Random(29).shuffle(items)\n", + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "-p", + "m28_order", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-W", + "error" + ], + "exit_code": 0, + "stdout": "............................................................. [100%]\n61 passed in 8.34s\n", + "stderr": "" + } + ], + "hashes": { + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/test_visualizer_review_contracts.py": "17163a01b61f7497d12e4c313e6870ac31c75314301323b07c76d30e0e3dbd9b", + "tests/visualizer_review_contracts.py": "d0b744c8b12e6d7d22923691bcac15f5d03b00d946941cf641b124421a2767ea" + } +} diff --git a/audit/m28_review_frozen_results.json b/audit/m28_review_frozen_results.json new file mode 100644 index 0000000..81c98c0 --- /dev/null +++ b/audit/m28_review_frozen_results.json @@ -0,0 +1,22221 @@ +{ + "active_head": "0c06cfd497579c5f99fd957c97ca28a052494bd4", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "working_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/proofs_dimred_visualizer.py": "6907249c50b205febac0e87ebdeb537dcd9d58ba7eadeaa4320cfd460a7ce1fb", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "d0b744c8b12e6d7d22923691bcac15f5d03b00d946941cf641b124421a2767ea", + "tests/test_visualizer_review_contracts.py": "17163a01b61f7497d12e4c313e6870ac31c75314301323b07c76d30e0e3dbd9b" + }, + "proofs_ref": null, + "runner_lf_sha256": "1691981d66db6f38b7d66743d648820bde9d3389f30f42f17b65bc06dc6afadd", + "runs": [ + { + "name": "C13", + "selection": "kde_labeled_regions", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "29d8c4c1e860508b96cdce82bf78feba2c48b5f74fb65984d9736dc44c8ddfee", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 82 deselected in 16.27s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n5 passed, 82 deselected in 25.66s\n", + "stderr": "" + } + }, + { + "name": "K4", + "selection": "kde_labeled_regions", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,15 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ draws = kde.resample(200000, seed=np.random.default_rng(7))\n+ density = kde.evaluate(draws)\n+ levels = sorted(float(np.quantile(density,1-p)) for p in [.99,.95,.68])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "f5353c35e24c3908f14540eb69100b0026502a508ea8e34823764b12bca1ecb7", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 82 deselected in 16.53s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2442, + 2443, + 2444, + 2445, + 2448, + 2449, + 2450, + 2452, + 2453, + 2454, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2469, + 2470, + 2472, + 2473, + 2475, + 2476, + 2478, + 2480, + 2481, + 2482, + 2483, + 2484, + 2485, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2493, + 2494, + 2495, + 2496, + 2497, + 2498, + 2499, + 2501, + 2502, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2512, + 2518, + 2657, + 2662, + 2663, + 2786, + 2790, + 2848, + 2854, + 2855, + 2968, + 2971 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n5 passed, 82 deselected in 26.79s\n", + "stderr": "" + } + }, + { + "name": "K5", + "selection": "kde_labeled_regions", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,20 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ sigma = np.sqrt(np.diag(kde.covariance))\n+ qx = np.linspace(kde.dataset[0].min()-4*sigma[0],kde.dataset[0].max()+4*sigma[0],500)\n+ qy = np.linspace(kde.dataset[1].min()-4*sigma[1],kde.dataset[1].max()+4*sigma[1],500)\n+ a,b = np.meshgrid(qx,qy)\n+ density = kde(np.vstack([a.ravel(),b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "ae151ba113c3b6bbaf69e6bc068592e34087bd1c03b58c4f5ea8281b75c44d42", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 82 deselected in 15.98s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2442, + 2443, + 2444, + 2445, + 2447, + 2448, + 2449, + 2450, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2461, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2474, + 2475, + 2477, + 2478, + 2480, + 2481, + 2483, + 2485, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2506, + 2507, + 2509, + 2510, + 2511, + 2513, + 2514, + 2515, + 2517, + 2523, + 2662, + 2667, + 2668, + 2791, + 2795, + 2853, + 2859, + 2860, + 2973, + 2976 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n5 passed, 82 deselected in 29.40s\n", + "stderr": "" + } + }, + { + "name": "K1B", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,14 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ peak=float(ZZ.max())\n+ levels=sorted((1-p)*peak for p in [.99,.95,.68])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "c7440409300cf121262065ba00ef3d8ec697b80fd48d35bae00e9d1e10bccafe", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n5 passed, 82 deselected in 25.82s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01325009\nE Max relative difference among violations: 0.01948543\nE ACTUAL: array(0.66675)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.06514077\nE Max relative difference among violations: 0.09579524\nE ACTUAL: array(0.614859)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 95% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00763319\nE Max relative difference among violations: 0.00803493\nE ACTUAL: array(0.957633)\nE DESIRED: array(0.95)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.07977581\nE Max relative difference among violations: 0.11731737\nE ACTUAL: array(0.600224)\nE DESIRED: array(0.68)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2436, + 2437, + 2438, + 2439, + 2441, + 2442, + 2443, + 2444, + 2447, + 2448, + 2449, + 2451, + 2452, + 2453, + 2455, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2466, + 2468, + 2469, + 2471, + 2472, + 2474, + 2475, + 2477, + 2479, + 2480, + 2481, + 2482, + 2483, + 2484, + 2485, + 2486, + 2487, + 2488, + 2489, + 2490, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2498, + 2500, + 2501, + 2503, + 2504, + 2505, + 2507, + 2508, + 2509, + 2511, + 2517, + 2656, + 2661, + 2662, + 2785, + 2789, + 2847, + 2853, + 2854, + 2967, + 2970 + ], + "stdout": "F.FFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01325009\nE Max relative difference among violations: 0.01948543\nE ACTUAL: array(0.66675)\nE DESIRED: array(0.68)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.06514077\nE Max relative difference among violations: 0.09579524\nE ACTUAL: array(0.614859)\nE DESIRED: array(0.68)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 95% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00763319\nE Max relative difference among violations: 0.00803493\nE ACTUAL: array(0.957633)\nE DESIRED: array(0.95)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.07977581\nE Max relative difference among violations: 0.11731737\nE ACTUAL: array(0.600224)\nE DESIRED: array(0.68)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n4 failed, 1 passed, 82 deselected in 18.41s\n", + "stderr": "" + } + }, + { + "name": "K6", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2475 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2485,7 +2476,7 @@\n cs,\n # Labels textuels 99/95/68% align\u00e9s aux niveaux calcul\u00e9s.\n fmt={\n- lv: nm for lv, nm in zip(levels, [\"99%\", \"95%\", \"68%\"][-n_lv:])\n+ lv: nm for lv, nm in zip(levels, [\"68%\", \"95%\", \"99%\"][-n_lv:])\n },\n fontsize=7,\n inline=True,\n", + "candidate_sha256": "0473bb1fd282d2ae32f067cc1cd2885486cf75b9cfc70ccd7fae3dd9aacc0ebf", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n5 passed, 82 deselected in 24.61s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3100187\nE Max relative difference among violations: 0.45590985\nE ACTUAL: array(0.990019)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997108\nE Max relative difference among violations: 0.45583983\nE ACTUAL: array(0.989971)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997656\nE Max relative difference among violations: 0.45584788\nE ACTUAL: array(0.989977)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31000088\nE Max relative difference among violations: 0.45588364\nE ACTUAL: array(0.990001)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31002934\nE Max relative difference among violations: 0.4559255\nE ACTUAL: array(0.990029)\nE DESIRED: array(0.68)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3100187\nE Max relative difference among violations: 0.45590985\nE ACTUAL: array(0.990019)\nE DESIRED: array(0.68)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997108\nE Max relative difference among violations: 0.45583983\nE ACTUAL: array(0.989971)\nE DESIRED: array(0.68)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997656\nE Max relative difference among violations: 0.45584788\nE ACTUAL: array(0.989977)\nE DESIRED: array(0.68)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31000088\nE Max relative difference among violations: 0.45588364\nE ACTUAL: array(0.990001)\nE DESIRED: array(0.68)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31002934\nE Max relative difference among violations: 0.4559255\nE ACTUAL: array(0.990029)\nE DESIRED: array(0.68)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 82 deselected in 22.47s\n", + "stderr": "" + } + }, + { + "name": "K7", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2424 + ], + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ] + ], + "patch": "--- \n+++ \n@@ -2421,33 +2421,24 @@\n # Sous-\u00e9chantillon pour stabiliser le co\u00fbt de la KDE.\n idx = rng.choice(len(Z_stars), N_KDE, replace=False)\n logger.info(\"Calcul KDE sur %d \u00e9toiles...\", N_KDE)\n- kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n+ kde = gaussian_kde(Z_ae.T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "5c14d1ded1f2fe64555f2b2c4a9b034c375610f1fbbad8333c1474264a5a096e", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n5 passed, 82 deselected in 26.02s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x0000020D2BBF27A0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x0000020D2B990900>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x0000020D2CF37A00>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "..FFF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x0000020D2BBF27A0>)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x0000020D2B990900>)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x0000020D2CF37A00>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n3 failed, 2 passed, 82 deselected in 14.00s\n", + "stderr": "" + } + }, + { + "name": "K8", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2465 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2474,7 +2465,7 @@\n cs = ax.contour(\n XX,\n YY,\n- ZZ,\n+ ZZ.T,\n levels=levels,\n colors=[\"#4A4A4A\", \"#2A2A2A\", \"#0A0A0A\"][-n_lv:],\n linewidths=[0.8, 1.2, 1.8][-n_lv:],\n", + "candidate_sha256": "c833f6f75c4e376a04cc2eea5031910643373a69836d06cd20e56e18f97f664b", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n5 passed, 82 deselected in 25.37s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01294495\nE Max relative difference among violations: 0.0130757\nE ACTUAL: array(0.977055)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:147: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0.05, atol=1e-10\nE Contour vertices are not on the fitted STAR iso-density\nE Mismatched elements: 425 / 457 (93%)\nE First 5 mismatches are at indices:\nE [0]: 8.749356970086692e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [1]: 8.648096934890717e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [2]: 8.559249232877267e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [3]: 8.481673619124976e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [4]: 8.414570496859691e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE Max absolute difference among violations: 0.00044197\nE Max relative difference among violations: 1.66420284\nE ACTUAL: array([8.749357e-05, 8.648097e-05, 8.559249e-05, 8.481674e-05,\nE 8.414570e-05, 8.357454e-05, 8.310137e-05, 8.272715e-05,\nE 8.245573e-05, 8.229383e-05, 8.229396e-05, 8.204398e-05,...\nE DESIRED: array(0.000266)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.22685682\nE Max relative difference among violations: 0.2291483\nE ACTUAL: array(0.763143)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3138107\nE Max relative difference among violations: 0.31698051\nE ACTUAL: array(0.676189)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.27101919\nE Max relative difference among violations: 0.27375676\nE ACTUAL: array(0.718981)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01294495\nE Max relative difference among violations: 0.0130757\nE ACTUAL: array(0.977055)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:147: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0.05, atol=1e-10\nE Contour vertices are not on the fitted STAR iso-density\nE Mismatched elements: 425 / 457 (93%)\nE First 5 mismatches are at indices:\nE [0]: 8.749356970086692e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [1]: 8.648096934890717e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [2]: 8.559249232877267e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [3]: 8.481673619124976e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [4]: 8.414570496859691e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE Max absolute difference among violations: 0.00044197\nE Max relative difference among violations: 1.66420284\nE ACTUAL: array([8.749357e-05, 8.648097e-05, 8.559249e-05, 8.481674e-05,\nE 8.414570e-05, 8.357454e-05, 8.310137e-05, 8.272715e-05,\nE 8.245573e-05, 8.229383e-05, 8.229396e-05, 8.204398e-05,...\nE DESIRED: array(0.000266)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.22685682\nE Max relative difference among violations: 0.2291483\nE ACTUAL: array(0.763143)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3138107\nE Max relative difference among violations: 0.31698051\nE ACTUAL: array(0.676189)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.27101919\nE Max relative difference among violations: 0.27375676\nE ACTUAL: array(0.718981)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 82 deselected in 22.89s\n", + "stderr": "" + } + }, + { + "name": "K9", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2465 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2474,7 +2465,7 @@\n cs = ax.contour(\n XX,\n YY,\n- ZZ,\n+ np.ma.masked_where(XX > 3, ZZ),\n levels=levels,\n colors=[\"#4A4A4A\", \"#2A2A2A\", \"#0A0A0A\"][-n_lv:],\n linewidths=[0.8, 1.2, 1.8][-n_lv:],\n", + "candidate_sha256": "7371291f3dffc0a862a6f8af606664cd85a80726f6d05444494d29a5f3e3c15a", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n5 passed, 82 deselected in 24.07s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.05631876\nE Max relative difference among violations: 0.05688764\nE ACTUAL: array(0.933681)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.06331658\nE Max relative difference among violations: 0.06395614\nE ACTUAL: array(0.926683)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.29256688\nE Max relative difference among violations: 0.2955221\nE ACTUAL: array(0.697433)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30004933\nE Max relative difference among violations: 0.30308013\nE ACTUAL: array(0.689951)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30314268\nE Max relative difference among violations: 0.30620472\nE ACTUAL: array(0.686857)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.05631876\nE Max relative difference among violations: 0.05688764\nE ACTUAL: array(0.933681)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.06331658\nE Max relative difference among violations: 0.06395614\nE ACTUAL: array(0.926683)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.29256688\nE Max relative difference among violations: 0.2955221\nE ACTUAL: array(0.697433)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30004933\nE Max relative difference among violations: 0.30308013\nE ACTUAL: array(0.689951)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30314268\nE Max relative difference among violations: 0.30620472\nE ACTUAL: array(0.686857)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 82 deselected in 22.28s\n", + "stderr": "" + } + }, + { + "name": "AD05", + "selection": "cluster_colorbar", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1420, + 1421, + 1422 + ], + [ + 1564, + 1565, + 1566 + ] + ], + "patch": "--- \n+++ \n@@ -1417,9 +1417,9 @@\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n- plt.colorbar(\n- sm, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n- ).ax.tick_params(labelsize=8)\n+ ax.legend(handles=[mpatches.Patch(color=color_map[c],label=f\"C{c}\") for c in cluster_ids])\n+ for annotation in list(ax.texts):\n+ annotation.remove()\n ax.text(\n 0.02,\n 0.98,\n@@ -1561,9 +1561,9 @@\n cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n )\n sm2.set_array([])\n- plt.colorbar(\n- sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n- ).ax.tick_params(labelsize=8)\n+ ax.legend(handles=[mpatches.Patch(color=color_map[c],label=f\"C{c}\") for c in cluster_ids])\n+ for annotation in list(ax.texts):\n+ annotation.remove()\n \n ax2 = axes[1]\n valid_teff = np.isfinite(teff)\n", + "candidate_sha256": "6b87a55bafb24be9782e14af82259b4b66f426cb9f4bcf689d5f08adc7fb82bb", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:236: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:236: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:236: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:236: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n2 failed, 85 deselected in 1.40s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n2 passed, 85 deselected in 1.16s\n", + "stderr": "" + } + }, + { + "name": "AC05", + "selection": "cluster_colorbar", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1415 + ], + [ + 1560 + ] + ], + "patch": "--- \n+++ \n@@ -1413,7 +1413,7 @@\n ),\n )\n sm = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n@@ -1558,7 +1558,7 @@\n )\n ax.grid(True, alpha=0.2)\n sm2 = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm2.set_array([])\n plt.colorbar(\n", + "candidate_sha256": "0ca8b2a77d45ca5e7e0c55444c021152cb005d5ef896b2725e86fabf00358c95", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:236: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:236: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:236: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:236: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n2 failed, 85 deselected in 1.40s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n2 passed, 85 deselected in 1.24s\n", + "stderr": "" + } + }, + { + "name": "FD02", + "selection": "hr_region_vertices", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 3206, + 3207 + ] + ], + "patch": "--- \n+++ \n@@ -3203,7 +3203,8 @@\n ax.invert_xaxis()\n ax.invert_yaxis()\n ax.set_xlim(T_HI + T_PAD * 5, T_LO - T_PAD * 5)\n- ax.set_ylim(G_HI + G_PAD * 5, G_LO - G_PAD * 5)\n+ _ys = [v[1] for r in REGIONS for v in r[\"poly\"]]\n+ ax.set_ylim(max(G_HI+G_PAD*5,max(_ys)),min(G_LO-G_PAD*5,min(_ys)))\n \n ax.xaxis.set_major_formatter(\n FuncFormatter(lambda x, _: f\"{int(x):,}\".replace(\",\", \"\\u202f\"))\n", + "candidate_sha256": "3b7b864ec4aca8ebe8af3fcb887b29c87e31fa8c150f1fa6654320fe9678d13f", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982, + 2995, + 2996, + 2997, + 2999, + 3000, + 3004, + 3005, + 3006, + 3011, + 3012, + 3013, + 3014, + 3016, + 3017, + 3026, + 3027, + 3028, + 3031, + 3034, + 3035, + 3037, + 3038, + 3039, + 3040, + 3041, + 3042, + 3043, + 3044, + 3046, + 3047, + 3048, + 3049, + 3050, + 3052, + 3053, + 3054, + 3055, + 3056, + 3057, + 3058, + 3060, + 3064, + 3065, + 3066, + 3067, + 3068, + 3069, + 3070, + 3071, + 3073, + 3074, + 3075, + 3076, + 3077, + 3078, + 3082, + 3083, + 3084, + 3085, + 3086, + 3087, + 3088, + 3089, + 3091, + 3092, + 3093, + 3094, + 3095, + 3096, + 3097, + 3101, + 3102, + 3103, + 3104, + 3105, + 3106, + 3107, + 3108, + 3110, + 3111, + 3112, + 3113, + 3114, + 3115, + 3116, + 3122, + 3125, + 3138, + 3139, + 3140, + 3141, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3151, + 3152, + 3153, + 3156, + 3157, + 3158, + 3159, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3167, + 3168, + 3169, + 3170, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3184, + 3185, + 3186, + 3187, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3199, + 3200, + 3201, + 3202, + 3204, + 3205, + 3207, + 3208, + 3209, + 3210, + 3212, + 3213, + 3215, + 3216, + 3218, + 3219 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n1 passed, 86 deselected in 1.01s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3207, + 3209, + 3210, + 3212, + 3213, + 3214, + 3215, + 3217, + 3218, + 3220, + 3221, + 3223, + 3224 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 86 deselected in 1.13s\n", + "stderr": "" + } + }, + { + "name": "FD09", + "selection": "more_reconstructions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1179, + 1180 + ] + ], + "patch": "--- \n+++ \n@@ -1176,6 +1176,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in list(axes)[len(idx):]:\n+ unused.plot([],[])\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n", + "candidate_sha256": "4ea4c2c1cbbd94860f59f7598eb65acf8e60297e3c9467d5d4297b41a24cc57c", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1090, + 1164, + 1165, + 1169, + 1171, + 1172, + 1173, + 1175, + 1177, + 1178, + 1179, + 1180, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1195, + 1196, + 1197, + 1200, + 1201, + 1202, + 1203, + 1205, + 1206, + 1207, + 1208, + 1209, + 1211, + 1212, + 1215, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n1 passed, 86 deselected in 0.76s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 1 >= 2\nE + where 1 = len()\nE + where = .lines" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1180, + 1181, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1196, + 1197, + 1198, + 1201, + 1202, + 1203, + 1204, + 1206, + 1207, + 1208, + 1209, + 1210, + 1212, + 1213, + 1216, + 1218, + 1258, + 1263, + 1264, + 1265, + 1317, + 1354, + 1359, + 1473, + 1478, + 1599, + 1602, + 1603, + 1604, + 1641, + 1646, + 1774, + 1779, + 1780, + 1954, + 1958, + 1959, + 2005, + 2009, + 2010, + 2057, + 2064, + 2164, + 2168, + 2216, + 2221, + 2222, + 2223, + 2290, + 2295, + 2392, + 2397, + 2529, + 2535, + 2674, + 2679, + 2680, + 2803, + 2807, + 2865, + 2871, + 2872, + 2985, + 2988 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 1 >= 2\nE + where 1 = len()\nE + where = .lines\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n1 failed, 86 deselected in 0.94s\n", + "stderr": "" + } + }, + { + "name": "FD11", + "selection": "log_histogram_keeps", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2823 + ], + [ + 2834 + ] + ], + "patch": "--- \n+++ \n@@ -2821,7 +2821,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(vals.min()), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n@@ -2832,7 +2832,7 @@\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n ax.hist(\n- vals,\n+ vals[vals>=1e-4] if xscale==\"log\" else vals,\n bins=bins,\n alpha=0.55,\n color=color,\n", + "candidate_sha256": "5930c4566f006317d795d17c7abe043d19c32f3977f5b56b6ed5a0ca90ea9c53", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n1 passed, 86 deselected in 1.27s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:342: in test_log_histogram_keeps_small_positive_errors\n missing, edges = visualizer_contracts.assert_histogram_population(call, errors)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests\\visualizer_review_contracts.py:130: in assert_histogram_population\n assert_array_equal(\nE AssertionError: \nE Arrays are not equal\nE Histogram omitted observations inside its own displayed support\nE Mismatched elements: 3 / 59 (5.08%)\nE Mismatch at indices:\nE [0]: 0 (ACTUAL), 1 (DESIRED)\nE [7]: 0 (ACTUAL), 1 (DESIRED)\nE [14]: 0 (ACTUAL), 1 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 1.\nE ACTUAL: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\nE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\nE 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])\nE DESIRED: array([1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\nE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\nE 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:342: in test_log_histogram_keeps_small_positive_errors\n missing, edges = visualizer_contracts.assert_histogram_population(call, errors)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests\\visualizer_review_contracts.py:130: in assert_histogram_population\n assert_array_equal(\nE AssertionError: \nE Arrays are not equal\nE Histogram omitted observations inside its own displayed support\nE Mismatched elements: 3 / 59 (5.08%)\nE Mismatch at indices:\nE [0]: 0 (ACTUAL), 1 (DESIRED)\nE [7]: 0 (ACTUAL), 1 (DESIRED)\nE [14]: 0 (ACTUAL), 1 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 1.\nE ACTUAL: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\nE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\nE 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])\nE DESIRED: array([1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\nE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\nE 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\n1 failed, 86 deselected in 1.41s\n", + "stderr": "" + } + }, + { + "name": "FD12", + "selection": "fifth_class", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1334, + 1335 + ] + ], + "patch": "--- \n+++ \n@@ -1331,6 +1331,8 @@\n )\n # M\u00e9diane trac\u00e9e pour robuste comparaison inter-classes.\n ax.axvline(np.median(vals), color=color, lw=2, ls=\"--\")\n+ for cls in classes[len(palette):]:\n+ ax.plot([],[],label=f\"{cls} (n={(y==cls).sum()})\")\n ax.set_xlabel(\"MSE de reconstruction\")\n ax.set_ylabel(\"Densit\u00e9\")\n ax.set_title(\"Distribution des erreurs de reconstruction par classe\")\n", + "candidate_sha256": "b37519ab25fa7ab3c9c4c6b3368adfb81196d35d6674894e44ebb03e95c431b8", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "fifth_class", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1316, + 1317, + 1318, + 1319, + 1320, + 1321, + 1323, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1332, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1343, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n1 passed, 86 deselected in 0.95s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "fifth_class", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:366: in test_histogram_does_not_silently_omit_fifth_class\n assert len(calls) == 5, \"Legend-only classes are not histogram populations\"\nE AssertionError: Legend-only classes are not histogram populations\nE assert 4 == 5\nE + where 4 = len([{'ax': . at 0x000002B0DA726F80>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 N = 43 019\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002B11CA5FCA0>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 N = 43 019\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002B0DA726F80>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 N = 43 019\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000002B11CA5FCA0>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\n2 failed, 85 deselected in 1.26s\n", + "stderr": "" + } + }, + { + "name": "FD10", + "selection": "truncated_variance_annotation", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 185 + ] + ], + "patch": "--- \n+++ \n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"\u2192 {cumvar[idx]*100:.1f}% avec {n_thresh} PCs\",\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n", + "candidate_sha256": "ab46a5dc5c97949be4f23c049415f85d0382a5329b53ab18a21b04f448ec7484", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "truncated_variance_annotation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n1 passed, 86 deselected in 0.74s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "truncated_variance_annotation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:326: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:326: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\n1 failed, 86 deselected in 0.89s\n", + "stderr": "" + } + }, + { + "name": "N01", + "selection": "xgboost_classes_confidence", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2076 + ] + ], + "patch": "--- \n+++ \n@@ -2081,7 +2081,7 @@\n alpha=0.55,\n linewidths=0,\n rasterized=True,\n- label=f\"{cls} (n={mask.sum()})\",\n+ label=f\"{classes_pred[(classes_pred.index(cls)+1)%len(classes_pred)]} (n={mask.sum()})\",\n )\n ax.legend(markerscale=4, fontsize=9, framealpha=0.9)\n ax.set_title(\"Pr\u00e9dictions XGBoost\", fontsize=12, fontweight=\"bold\")\n", + "candidate_sha256": "50853fb90afce1cf5e8b4cb4d8fca701b582b3dedb44bb9550aa5c455514ae8f", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2064, + 2067, + 2068, + 2069, + 2071, + 2072, + 2073, + 2075, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2085, + 2086, + 2087, + 2088, + 2089, + 2091, + 2092, + 2094, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2106, + 2107, + 2109, + 2112, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2121, + 2122, + 2124, + 2125, + 2127, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2136, + 2137, + 2139, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2148, + 2149, + 2150, + 2152, + 2153, + 2154, + 2155, + 2157, + 2158, + 2159, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n2 passed, 85 deselected in 0.99s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:507: in test_xgboost_classes_confidence_and_cluster_associations\n assert re.search(\nE AssertionError: Prediction label differs from its actual points\nE assert None\nE + where None = ('\\\\bF\\\\b', 'G (n=3)')\nE + where = .search\nE + and 'G (n=3)' = get_label()\nE + where get_label = .get_label" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:507: in test_xgboost_classes_confidence_and_cluster_associations\n assert re.search(\nE AssertionError: Prediction label differs from its actual points\nE assert None\nE + where None = ('\\\\bF\\\\b', 'G (n=3)')\nE + where = .search\nE + and 'G (n=3)' = get_label()\nE + where get_label = .get_label" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n_______ test_xgboost_classes_confidence_and_cluster_associations[None] ________\ntests\\test_dimred_visualizer.py:507: in test_xgboost_classes_confidence_and_cluster_associations\n assert re.search(\nE AssertionError: Prediction label differs from its actual points\nE assert None\nE + where None = ('\\\\bF\\\\b', 'G (n=3)')\nE + where = .search\nE + and 'G (n=3)' = get_label()\nE + where get_label = .get_label\n____ test_xgboost_classes_confidence_and_cluster_associations[confidence1] ____\ntests\\test_dimred_visualizer.py:507: in test_xgboost_classes_confidence_and_cluster_associations\n assert re.search(\nE AssertionError: Prediction label differs from its actual points\nE assert None\nE + where None = ('\\\\bF\\\\b', 'G (n=3)')\nE + where = .search\nE + and 'G (n=3)' = get_label()\nE + where get_label = .get_label\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_xgboost_classes_confidence_and_cluster_associations[None]\nFAILED tests/test_dimred_visualizer.py::test_xgboost_classes_confidence_and_cluster_associations[confidence1]\n2 failed, 85 deselected in 1.18s\n", + "stderr": "" + } + }, + { + "name": "N02", + "selection": "real_analyzer_state", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1445 + ] + ], + "patch": "--- \n+++ \n@@ -1449,7 +1449,7 @@\n marker=CLASS_MARKERS.get(cls, \"o\"),\n s=2,\n alpha=0.45,\n- label=f\"{cls} (n={mask.sum()})\",\n+ label=f\"{np.unique(y)[(list(np.unique(y)).index(cls)+1)%len(np.unique(y))]} (n={mask.sum()})\",\n rasterized=True,\n linewidths=0,\n )\n", + "candidate_sha256": "88d7e6f3129fd84d22c03d7ab14f92793c96b9580c2ac5937eba0efda98740a3", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1359, + 1360, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1371, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1386, + 1387, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1414, + 1415, + 1417, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1426, + 1427, + 1428, + 1429, + 1430, + 1432, + 1433, + 1434, + 1435, + 1437, + 1440, + 1441, + 1442, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1455, + 1456, + 1457, + 1458, + 1460, + 1461, + 1462, + 1463, + 1464, + 1466, + 1467, + 1468, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n3 passed, 84 deselected in 1.09s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:402: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:402: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:402: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFF [100%]\n================================== FAILURES ===================================\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels0] _______\ntests\\test_dimred_visualizer.py:402: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels1] _______\ntests\\test_dimred_visualizer.py:402: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels2] _______\ntests\\test_dimred_visualizer.py:402: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels0]\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels1]\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels2]\n3 failed, 84 deselected in 1.36s\n", + "stderr": "" + } + }, + { + "name": "N04", + "selection": "synthesis_preserves", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2966 + ] + ], + "patch": "--- \n+++ \n@@ -2964,7 +2964,7 @@\n ax.set_xlabel(xlabel, fontsize=8)\n if col == 0:\n ax.set_ylabel(\n- f\"{method_name}\\n{ylabel}\", fontsize=9, fontweight=\"bold\"\n+ f\"{METHODS[-1-row][0]}\\n{ylabel}\", fontsize=9, fontweight=\"bold\"\n )\n else:\n ax.set_ylabel(ylabel, fontsize=8)\n", + "candidate_sha256": "582917faca6080dc0e4f1c28c85117c5c52d80e53223745247f2630bdb8eba88", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2869, + 2871, + 2872, + 2873, + 2874, + 2875, + 2877, + 2879, + 2880, + 2882, + 2883, + 2885, + 2891, + 2892, + 2893, + 2894, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2906, + 2907, + 2908, + 2909, + 2911, + 2912, + 2913, + 2914, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2924, + 2926, + 2928, + 2930, + 2931, + 2932, + 2942, + 2943, + 2944, + 2945, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2954, + 2955, + 2956, + 2957, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2966, + 2967, + 2968, + 2970, + 2971, + 2973, + 2974, + 2976, + 2977, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n2 passed, 85 deselected in 0.95s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:660: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert re.search(expected_name, data_axes[row * 3].get_ylabel(), re.I)\nE AssertionError: assert None\nE + where None = ('\\\\bPCA\\\\b', 'Autoencodeur\\nPC2', re.IGNORECASE)\nE + where = .search\nE + and 'Autoencodeur\\nPC2' = get_ylabel()\nE + where get_ylabel = .get_ylabel\nE + and re.IGNORECASE = .I" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:660: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert re.search(expected_name, data_axes[row * 3].get_ylabel(), re.I)\nE AssertionError: assert None\nE + where None = ('\\\\bPCA\\\\b', 'Autoencodeur\\nPC2', re.IGNORECASE)\nE + where = .search\nE + and 'Autoencodeur\\nPC2' = get_ylabel()\nE + where get_ylabel = .get_ylabel\nE + and re.IGNORECASE = .I" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[False] ___\ntests\\test_dimred_visualizer.py:660: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert re.search(expected_name, data_axes[row * 3].get_ylabel(), re.I)\nE AssertionError: assert None\nE + where None = ('\\\\bPCA\\\\b', 'Autoencodeur\\nPC2', re.IGNORECASE)\nE + where = .search\nE + and 'Autoencodeur\\nPC2' = get_ylabel()\nE + where get_ylabel = .get_ylabel\nE + and re.IGNORECASE = .I\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[True] ____\ntests\\test_dimred_visualizer.py:660: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert re.search(expected_name, data_axes[row * 3].get_ylabel(), re.I)\nE AssertionError: assert None\nE + where None = ('\\\\bPCA\\\\b', 'Autoencodeur\\nPC2', re.IGNORECASE)\nE + where = .search\nE + and 'Autoencodeur\\nPC2' = get_ylabel()\nE + where get_ylabel = .get_ylabel\nE + and re.IGNORECASE = .I\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]\n2 failed, 85 deselected in 1.15s\n", + "stderr": "" + } + }, + { + "name": "N10", + "selection": "real_sklearn_trustworthiness", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2236 + ] + ], + "patch": "--- \n+++ \n@@ -2233,7 +2233,7 @@\n idx = rng.choice(len(X_ref), size=n, replace=False)\n X_sub = X_ref[idx]\n Zu_sub = Z_umap[idx]\n- Zt_sub = Z_tsne[idx]\n+ Zt_sub = Z_tsne[np.roll(idx,1)]\n \n trust_u, trust_t = [], []\n for k in k_values:\n", + "candidate_sha256": "9a92851045aa8e4839b1923d4d613d9f6a4c578cca63944ccfd78d6874c17396", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2223, + 2224, + 2226, + 2229, + 2230, + 2232, + 2233, + 2234, + 2235, + 2237, + 2238, + 2240, + 2241, + 2242, + 2243, + 2245, + 2246, + 2247, + 2249, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2259, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2268, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2278, + 2279, + 2280, + 2281, + 2282, + 2283, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n2 passed, 85 deselected in 2.74s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 24 / 24 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -0.13429338949088465 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 1.1776172821553483 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: 0.7540394717615756 (ACTUAL), -0.6451940968015629 (DESIRED)\nE [1, 1]: 1.9947886386434426 (ACTUAL), 0.0825255266666682 (DESIRED)\nE [2, 0]: -0.6451940968015629 (ACTUAL), -0.11873997633083841 (DESIRED)\nE Max absolute difference among violations: 3.0315093\nE Max relative difference among violations: 23.17177714\nE ACTUAL: array([[-0.134293, 1.177617],\nE [ 0.754039, 1.994789],\nE [-0.645194, 0.082526],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-0.645194, 0.082526],\nE [-0.11874 , -1.400206],..." + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 18 / 18 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: 0.21879687040848914 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: -1.1148814736874748 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: 0.7540394717615756 (ACTUAL), -1.0861640144823521 (DESIRED)\nE [1, 1]: 1.9947886386434426 (ACTUAL), -0.5693158913378338 (DESIRED)\nE [2, 0]: -1.0861640144823521 (ACTUAL), -1.215555026777933 (DESIRED)\nE Max absolute difference among violations: 3.10967011\nE Max relative difference among violations: 6.97417863\nE ACTUAL: array([[ 0.218797, -1.114881],\nE [ 0.754039, 1.994789],\nE [-1.086164, -0.569316],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-1.086164, -0.569316],\nE [-1.215555, 0.138822],..." + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[12] ________\ntests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 24 / 24 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -0.13429338949088465 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 1.1776172821553483 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: 0.7540394717615756 (ACTUAL), -0.6451940968015629 (DESIRED)\nE [1, 1]: 1.9947886386434426 (ACTUAL), 0.0825255266666682 (DESIRED)\nE [2, 0]: -0.6451940968015629 (ACTUAL), -0.11873997633083841 (DESIRED)\nE Max absolute difference among violations: 3.0315093\nE Max relative difference among violations: 23.17177714\nE ACTUAL: array([[-0.134293, 1.177617],\nE [ 0.754039, 1.994789],\nE [-0.645194, 0.082526],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-0.645194, 0.082526],\nE [-0.11874 , -1.400206],...\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[9] _________\ntests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 18 / 18 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: 0.21879687040848914 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: -1.1148814736874748 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: 0.7540394717615756 (ACTUAL), -1.0861640144823521 (DESIRED)\nE [1, 1]: 1.9947886386434426 (ACTUAL), -0.5693158913378338 (DESIRED)\nE [2, 0]: -1.0861640144823521 (ACTUAL), -1.215555026777933 (DESIRED)\nE Max absolute difference among violations: 3.10967011\nE Max relative difference among violations: 6.97417863\nE ACTUAL: array([[ 0.218797, -1.114881],\nE [ 0.754039, 1.994789],\nE [-1.086164, -0.569316],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-1.086164, -0.569316],\nE [-1.215555, 0.138822],...\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[12]\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[9]\n2 failed, 85 deselected in 3.09s\n", + "stderr": "" + } + }, + { + "name": "N05", + "selection": "interpolation_actual", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1278, + 1279 + ] + ], + "patch": "--- \n+++ \n@@ -1275,8 +1275,8 @@\n ax.plot(\n Z_interp[:, 0], Z_interp[:, 1], color=\"gray\", lw=1.5, zorder=2, alpha=0.6\n )\n- ax.scatter(*Z_interp[0], s=120, c=\"blue\", zorder=4, marker=\"*\", label=label_a)\n- ax.scatter(*Z_interp[-1], s=120, c=\"red\", zorder=4, marker=\"*\", label=label_b)\n+ ax.scatter(*Z_interp[0], s=120, c=\"blue\", zorder=4, marker=\"*\", label=(label_b))\n+ ax.scatter(*Z_interp[-1], s=120, c=\"red\", zorder=4, marker=\"*\", label=label_a)\n plt.colorbar(sc, ax=ax, label=\"\u03b1 (interpolation)\")\n ax.set_xlabel(\"Latent axe 1\")\n ax.set_ylabel(\"Latent axe 2\")\n", + "candidate_sha256": "13917cb73aeae55c591400ff03d4efccc14cb00db98ff3d27b4b51dcae35f4b0", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "interpolation_actual", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1266, + 1267, + 1268, + 1269, + 1271, + 1272, + 1274, + 1275, + 1277, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1285, + 1287, + 1288, + 1289, + 1291, + 1292, + 1293, + 1294, + 1295, + 1296, + 1298, + 1299, + 1300, + 1302, + 1303, + 1304, + 1305, + 1306, + 1308, + 1309, + 1312, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n1 passed, 86 deselected in 0.77s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "interpolation_actual", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:289: in test_interpolation_actual_path_feature_order_and_endpoints\n assert axes[0].collections[1].get_label() == \"A\"\nE AssertionError: assert 'B' == 'A'\nE \nE - A\nE + B" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_________ test_interpolation_actual_path_feature_order_and_endpoints __________\ntests\\test_dimred_visualizer.py:289: in test_interpolation_actual_path_feature_order_and_endpoints\n assert axes[0].collections[1].get_label() == \"A\"\nE AssertionError: assert 'B' == 'A'\nE \nE - A\nE + B\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_interpolation_actual_path_feature_order_and_endpoints\n1 failed, 86 deselected in 0.93s\n", + "stderr": "" + } + }, + { + "name": "N06", + "selection": "family_weights_bar", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 369 + ], + [ + 379 + ] + ], + "patch": "--- \n+++ \n@@ -374,7 +374,7 @@\n alpha=0.92,\n edgecolor=\"white\",\n linewidth=0.5,\n- label=\"PC1\",\n+ label=(\"PC2\"),\n )\n ax.bar(\n x + w / 2,\n@@ -384,7 +384,7 @@\n alpha=0.55,\n edgecolor=\"white\",\n linewidth=0.5,\n- label=\"PC2\",\n+ label=\"PC1\",\n hatch=\"//\",\n )\n # Lecture visuelle: opaque = PC1, hachur\u00e9/translucide = PC2.\n", + "candidate_sha256": "aab9151c32a9184032f1d5cb8092e7e951262c5c208f6af603017ab2a386df19", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "family_weights_bar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n1 passed, 86 deselected in 0.74s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "family_weights_bar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:172: in test_family_weights_bar_and_donut_angles\n assert_allclose([p.get_height() for p in series[\"PC1\"]], [80, 20, 0])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.0 (ACTUAL), 80 (DESIRED)\nE [1]: 30.0 (ACTUAL), 20 (DESIRED)\nE [2]: 70.0 (ACTUAL), 0 (DESIRED)\nE Max absolute difference among violations: 80.\nE Max relative difference among violations: 1.\nE ACTUAL: array([ 0., 30., 70.])\nE DESIRED: array([80, 20, 0])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n__________________ test_family_weights_bar_and_donut_angles ___________________\ntests\\test_dimred_visualizer.py:172: in test_family_weights_bar_and_donut_angles\n assert_allclose([p.get_height() for p in series[\"PC1\"]], [80, 20, 0])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.0 (ACTUAL), 80 (DESIRED)\nE [1]: 30.0 (ACTUAL), 20 (DESIRED)\nE [2]: 70.0 (ACTUAL), 0 (DESIRED)\nE Max absolute difference among violations: 80.\nE Max relative difference among violations: 1.\nE ACTUAL: array([ 0., 30., 70.])\nE DESIRED: array([80, 20, 0])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_family_weights_bar_and_donut_angles\n1 failed, 86 deselected in 0.82s\n", + "stderr": "" + } + }, + { + "name": "N03", + "selection": "real_export_readable", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024 + ] + ], + "patch": "--- \n+++ \n@@ -1015,7 +1015,13 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ import pickle\n+ clone=pickle.loads(pickle.dumps(fig))\n+ for axis in clone.axes:\n+ for collection in list(axis.collections):\n+ collection.remove()\n+ clone.savefig(path,bbox_inches=\"tight\",dpi=self.dpi)\n+ plt.close(clone)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n", + "candidate_sha256": "fc72e8f8514911cc968fd57dee9b6fb78846d55c43c6ac4763aa2c96a77b1421", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n2 passed, 85 deselected in 1.17s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:685: in test_real_export_readable_and_same_semantic_figure\n visualizer_contracts.assert_png_matches_figure(path, fig, c.viz.dpi)\ntests\\visualizer_review_contracts.py:45: in assert_png_matches_figure\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=1\nE Exported scientific artists differ from the returned figure\nE Mismatched elements: 162 / 312700 (0.0518%)\nE First 5 mismatches are at indices:\nE [28, 127, 0]: 255 (ACTUAL), 250 (DESIRED)\nE [28, 127, 1]: 255 (ACTUAL), 251 (DESIRED)\nE [28, 127, 2]: 255 (ACTUAL), 252 (DESIRED)\nE [28, 128, 0]: 255 (ACTUAL), 214 (DESIRED)\nE [28, 128, 1]: 255 (ACTUAL), 223 (DESIRED)\nE Max absolute difference among violations: 125\nE Max relative difference among violations: 0.96153846\nE ACTUAL: array([[[255, 255, 255, 255],\nE [255, 255, 255, 255],\nE [255, 255, 255, 255],...\nE DESIRED: array([[[255, 255, 255, 255],\nE [255, 255, 255, 255],\nE [255, 255, 255, 255],..." + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024, + 1025, + 1031, + 1098, + 1171, + 1172, + 1222, + 1262, + 1267, + 1268, + 1269, + 1321, + 1358, + 1363, + 1477, + 1482, + 1603, + 1606, + 1607, + 1608, + 1645, + 1650, + 1778, + 1783, + 1784, + 1958, + 1962, + 1963, + 2009, + 2013, + 2014, + 2061, + 2068, + 2168, + 2172, + 2220, + 2225, + 2226, + 2227, + 2294, + 2299, + 2396, + 2401, + 2533, + 2539, + 2678, + 2683, + 2684, + 2807, + 2811, + 2869, + 2875, + 2876, + 2989, + 2992 + ], + "stdout": "F. [100%]\n================================== FAILURES ===================================\n___________ test_real_export_readable_and_same_semantic_figure[png] ___________\ntests\\test_dimred_visualizer.py:685: in test_real_export_readable_and_same_semantic_figure\n visualizer_contracts.assert_png_matches_figure(path, fig, c.viz.dpi)\ntests\\visualizer_review_contracts.py:45: in assert_png_matches_figure\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=1\nE Exported scientific artists differ from the returned figure\nE Mismatched elements: 162 / 312700 (0.0518%)\nE First 5 mismatches are at indices:\nE [28, 127, 0]: 255 (ACTUAL), 250 (DESIRED)\nE [28, 127, 1]: 255 (ACTUAL), 251 (DESIRED)\nE [28, 127, 2]: 255 (ACTUAL), 252 (DESIRED)\nE [28, 128, 0]: 255 (ACTUAL), 214 (DESIRED)\nE [28, 128, 1]: 255 (ACTUAL), 223 (DESIRED)\nE Max absolute difference among violations: 125\nE Max relative difference among violations: 0.96153846\nE ACTUAL: array([[[255, 255, 255, 255],\nE [255, 255, 255, 255],\nE [255, 255, 255, 255],...\nE DESIRED: array([[[255, 255, 255, 255],\nE [255, 255, 255, 255],\nE [255, 255, 255, 255],...\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_export_readable_and_same_semantic_figure[png]\n1 failed, 1 passed, 85 deselected in 1.34s\n", + "stderr": "" + } + }, + { + "name": "A_TRUST", + "selection": "real_sklearn_trustworthiness", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2233 + ] + ], + "patch": "--- \n+++ \n@@ -2230,7 +2230,7 @@\n rng = np.random.default_rng(42)\n n = min(n_subsample, len(X_ref))\n # Sous-\u00e9chantillonnage pour ma\u00eetriser le co\u00fbt de calcul T(k).\n- idx = rng.choice(len(X_ref), size=n, replace=False)\n+ idx = np.sort(rng.permutation(len(X_ref))[:n])\n X_sub = X_ref[idx]\n Zu_sub = Z_umap[idx]\n Zt_sub = Z_tsne[idx]\n", + "candidate_sha256": "fcc67a8362f6f40330e5d109e8e0851d1fe3ef3870d3986f40d225d1bf91f9c2", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n2 passed, 85 deselected in 2.77s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n2 passed, 85 deselected in 2.68s\n", + "stderr": "" + } + }, + { + "name": "AD14", + "selection": "trustworthiness_axis_contains", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2279, + 2280 + ] + ], + "patch": "--- \n+++ \n@@ -2276,7 +2276,8 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0.75,1.01)\n+ ax.text(.1,.1,f\"T(k) < 0.75 hors champ : min = {min(trust_t):.3f}\",transform=ax.transAxes)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n", + "candidate_sha256": "b226e92e6afab749ae6ab91b70733b47ccaf8995f634945d03935428180aa4ba", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:202: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:202: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\n1 failed, 86 deselected in 2.72s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2285, + 2289, + 2294, + 2391, + 2396, + 2528, + 2534, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n1 passed, 86 deselected in 2.32s\n", + "stderr": "" + } + }, + { + "name": "A_EXPORT", + "selection": "default_output_directory or real_export_readable", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1087 + ], + [ + 1249 + ] + ], + "patch": "--- \n+++ \n@@ -1084,9 +1084,7 @@\n \"Autoencodeur \u2014 Historique d'entra\u00eenement (LAMOST DR5)\", fontsize=13, y=1.02\n )\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_training_history\")\n return fig, axes\n \n def plot_ae_embedding(self, Z, meta, y, save_path=None):\n@@ -1248,9 +1246,7 @@\n ax.legend(fontsize=9)\n ax.grid(True, alpha=0.3)\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_ae_vs_pca\")\n return fig, ax\n \n def plot_latent_interpolation(\n", + "candidate_sha256": "03cd6fc36c4863b2d546a7b7a0986741434046b13d54c198a9eca3cf45e23b75", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_output_directory or real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1495/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1495/test_default_output_directory_1').glob" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1165, + 1166, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "..FF [100%]\n================================== FAILURES ===================================\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1495/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1495/test_default_output_directory_1').glob\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\n2 failed, 2 passed, 83 deselected in 1.77s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_output_directory or real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1010, + 1012, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1088, + 1090, + 1163, + 1164, + 1214, + 1216, + 1218, + 1219, + 1221, + 1222, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1231, + 1233, + 1234, + 1236, + 1238, + 1239, + 1240, + 1241, + 1243, + 1244, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1252, + 1257, + 1258, + 1259, + 1311, + 1348, + 1353, + 1467, + 1472, + 1593, + 1596, + 1597, + 1598, + 1635, + 1640, + 1768, + 1773, + 1774, + 1948, + 1952, + 1953, + 1999, + 2003, + 2004, + 2051, + 2058, + 2158, + 2162, + 2210, + 2215, + 2216, + 2217, + 2284, + 2289, + 2386, + 2391, + 2523, + 2529, + 2668, + 2673, + 2674, + 2797, + 2801, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n4 passed, 83 deselected in 2.29s\n", + "stderr": "" + } + }, + { + "name": "A_METHODS", + "selection": "synthesis_preserves", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2887 + ] + ], + "patch": "--- \n+++ \n@@ -2884,7 +2884,7 @@\n if Z_umap is not None:\n # UMAP est optionnel selon le notebook ex\u00e9cut\u00e9.\n METHODS.append((\"UMAP\", Z_umap, \"UMAP 1\", \"UMAP 2\"))\n- METHODS.append((\"Autoencodeur\", Z_ae, \"Latent 1\", \"Latent 2\"))\n+ METHODS.append((\"AE\", Z_ae, \"Latent 1\", \"Latent 2\"))\n \n PARAMS = [\n (\"Classe spectrale\", None, None),\n", + "candidate_sha256": "c262ecf582497b62b25e0ba2a89eb1c64108a95e763215442d6b610a19acc030", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n2 passed, 85 deselected in 0.95s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n2 passed, 85 deselected in 0.96s\n", + "stderr": "" + } + }, + { + "name": "A_HIST", + "selection": "linear_histogram_truncation", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2833 + ] + ], + "patch": "--- \n+++ \n@@ -2830,7 +2830,7 @@\n if np.any(y == \"STAR\")\n else vals.max()\n )\n- bins = np.linspace(0, star_p99 * 1.5, 60)\n+ bins = np.linspace(0, float(np.max(mse_per_sample)), 60)\n ax.hist(\n vals,\n bins=bins,\n", + "candidate_sha256": "c4089757fef756a2e5f871e344afcfaba96057c66a8c6516a744d75ae4ed022a", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]), array([0.04 , 0.09 , 0.1 , 4. , 4.06521739,\\n 4.13043478, 4.19565217, 4.26086957, 4.326086...48, 6.47826087, 6.54347826, 6.60869565, 6.67391304,\\n 6.73913043, 6.80434783, 6.86956522, 6.93478261, 7. ]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]), array([0.04 , 0.09 , 0.1 , 4. , 4.06521739,\\n 4.13043478, 4.19565217, 4.26086957, 4.326086...48, 6.47826087, 6.54347826, 6.60869565, 6.67391304,\\n 6.73913043, 6.80434783, 6.86956522, 6.93478261, 7. ]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n1 failed, 86 deselected in 1.40s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n1 passed, 86 deselected in 1.30s\n", + "stderr": "" + } + }, + { + "name": "AD_HIST", + "selection": "linear_histogram_truncation", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2834, + 2835, + 2836 + ] + ], + "patch": "--- \n+++ \n@@ -2831,6 +2831,9 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls}: excluded {missing} of {len(vals)} outside support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n", + "candidate_sha256": "dd837b5041209b36dbb2ea5dbd14f3fa8c002cde560a5fe1472b6db67f1b5578", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]), array([0.04 , 0.09 , 0.1 , 4. , 4.06521739,\\n 4.13043478, 4.19565217, 4.26086957, 4.326086...48, 6.47826087, 6.54347826, 6.60869565, 6.67391304,\\n 6.73913043, 6.80434783, 6.86956522, 6.93478261, 7. ]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]), array([0.04 , 0.09 , 0.1 , 4. , 4.06521739,\\n 4.13043478, 4.19565217, 4.26086957, 4.326086...48, 6.47826087, 6.54347826, 6.60869565, 6.67391304,\\n 6.73913043, 6.80434783, 6.86956522, 6.93478261, 7. ]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n1 failed, 86 deselected in 1.39s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2846, + 2847, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2858, + 2859, + 2860, + 2862, + 2863, + 2864, + 2866, + 2872, + 2873, + 2986, + 2989 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n1 passed, 86 deselected in 1.28s\n", + "stderr": "" + } + }, + { + "name": "AD_LOG", + "selection": "log_histogram_keeps", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2834, + 2835, + 2836 + ] + ], + "patch": "--- \n+++ \n@@ -2831,6 +2831,9 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls}: excluded {missing} of {len(vals)} outside support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n", + "candidate_sha256": "dd837b5041209b36dbb2ea5dbd14f3fa8c002cde560a5fe1472b6db67f1b5578", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:343: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:343: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\n1 failed, 86 deselected in 1.31s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2846, + 2847, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2858, + 2859, + 2860, + 2862, + 2863, + 2864, + 2866, + 2872, + 2873, + 2986, + 2989 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n1 passed, 86 deselected in 1.19s\n", + "stderr": "" + } + }, + { + "name": "JOINT", + "selection": "", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 154 + ], + [ + 185 + ], + [ + 288 + ], + [ + 869 + ], + [ + 1018 + ], + [ + 1087 + ], + [ + 1110 + ], + [ + 1178, + 1179 + ], + [ + 1252 + ], + [ + 1319 + ], + [ + 1414 + ], + [ + 1559 + ], + [ + 2019 + ], + [ + 2040 + ], + [ + 2068 + ], + [ + 2278 + ], + [ + 2320 + ], + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2527, + 2528 + ], + [ + 2816 + ], + [ + 2827, + 2828, + 2829 + ], + [ + 3035 + ], + [ + 3209 + ] + ], + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, 100 * ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"{n_thresh} PCs\\n\u2192 {pca_analyzer.explained_variance_ratio[:n_thresh].sum()*100:.1f}%\",\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n@@ -285,7 +285,7 @@\n df = df.sort_values(\"loading\")\n \n # Couleur encodant le signe physique de la contribution.\n- colors = [\"#DD8452\" if v < 0 else \"#4C72B0\" for v in df[\"loading\"]]\n+ colors = [\"#CC5500\" if v < 0 else \"#0055CC\" for v in df[\"loading\"]]\n fig, ax = plt.subplots(figsize=(8, max(4, n_top * 0.35)), dpi=self.dpi)\n \n ax.barh(\n@@ -869,7 +869,7 @@\n ax.text(\n lam,\n ymax * 0.88,\n- nom,\n+ nom.replace(chr(92)*2, chr(92)),\n rotation=90,\n fontsize=6,\n color=\"crimson\",\n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ fig.canvas.print_figure(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n@@ -1084,9 +1084,7 @@\n \"Autoencodeur \u2014 Historique d'entra\u00eenement (LAMOST DR5)\", fontsize=13, y=1.02\n )\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_training_history\")\n return fig, axes\n \n def plot_ae_embedding(self, Z, meta, y, save_path=None):\n@@ -1109,6 +1107,7 @@\n \n PALETTE = {\"STAR\": \"#4C72B0\", \"GALAXY\": \"#DD8452\", \"QSO\": \"#55A868\"}\n MARKERS = {\"STAR\": \"o\", \"GALAXY\": \"s\", \"QSO\": \"^\"}\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -1176,6 +1175,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in axes[len(idx):]:\n+ unused.set_visible(False)\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n@@ -1248,9 +1249,7 @@\n ax.legend(fontsize=9)\n ax.grid(True, alpha=0.3)\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_ae_vs_pca\")\n return fig, ax\n \n def plot_latent_interpolation(\n@@ -1317,7 +1316,7 @@\n classes = np.unique(y)\n palette = [\"#4C72B0\", \"#DD8452\", \"#55A868\", \"#C44E52\"]\n fig, ax = plt.subplots(figsize=(9, 5), dpi=self.dpi)\n- for cls, color in zip(classes, palette):\n+ for cls, color in zip(classes, palette*((len(classes)+len(palette)-1)//len(palette))):\n mask = y == cls\n vals = mse_per_sample[mask]\n # Histogrammes normalis\u00e9s pour comparer les formes de distribution.\n@@ -1413,7 +1412,7 @@\n ),\n )\n sm = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n@@ -1558,7 +1557,7 @@\n )\n ax.grid(True, alpha=0.2)\n sm2 = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm2.set_array([])\n plt.colorbar(\n@@ -2017,7 +2016,7 @@\n ncols = 4\n nrows = (n_show + ncols - 1) // ncols\n fig, axes = plt.subplots(nrows, ncols, figsize=(5 * ncols, 4 * nrows), dpi=120)\n- axes_flat = axes.flatten() if n_show > 1 else [axes]\n+ axes_flat = np.asarray(axes).ravel()\n \n for ax_i, cid in zip(axes_flat, top_cids):\n profile = cluster_means.loc[cid]\n@@ -2038,7 +2037,7 @@\n ax_i.set_xlabel(\"Score moyen (\u03c3)\", fontsize=8)\n ax_i.grid(axis=\"x\", alpha=0.3)\n ax_i.set_xlim(-3, 3)\n- for ax_i in axes_flat[n_show:]:\n+ for ax_i in axes_flat[len(top_cids):]:\n ax_i.axis(\"off\")\n fig.suptitle(\n \"Top-5 features caract\u00e9ristiques par cluster HDBSCAN\\n\"\n@@ -2066,7 +2065,7 @@\n \n # V\u00e9rifie si une vraie probabilit\u00e9 est disponible.\n classes_pred = sorted(set(y_pred))\n- has_proba = confidence is not None and not np.all(confidence == 1.0)\n+ has_proba = confidence is not None\n fig, axes = plt.subplots(1, 3, figsize=(22, 8), dpi=self.dpi)\n \n ax = axes[0]\n@@ -2276,7 +2275,7 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0, 1.01)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n@@ -2318,6 +2317,7 @@\n ]\n \n fig, axes = plt.subplots(1, 1 + len(available), figsize=(22, 5), dpi=self.dpi)\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2533,6 +2524,8 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ if not (len(X) == len(X_recon) == len(spectral_types)):\n+ raise RuntimeError(\"Observation alignment: incompatible lengths\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n@@ -2821,7 +2814,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(max(vals.min(), np.finfo(float).tiny)), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n@@ -2831,6 +2824,9 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls}: excluded {missing} of {len(vals)} outside support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n@@ -3054,7 +3050,7 @@\n MS_G_HOT + (MS_G_COOL - MS_G_HOT) * 0.35,\n ),\n (T_LO + (T_HI - T_LO) * 0.25, MS_G_COOL - 0.10),\n- (T_LO + T_PAD, G_HI - T_PAD * 2),\n+ (T_LO + T_PAD, G_HI - G_PAD * 2),\n (T_LO + T_PAD, G_HI - G_PAD),\n (T_LO + (T_HI - T_LO) * 0.20, MS_G_COOL + MS_W * 0.6),\n (\n@@ -3212,7 +3208,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 population fournie\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "candidate_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_disclosure_identifies_the_relevant_exclusion_bound", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001A3AF147060>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001A3AF16BBC0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:204: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:236: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:236: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:238: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000001A3AD95F840>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:250: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:251: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:271: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:270: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:279: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:326: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:343: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:364: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1497/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1497/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:202: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:432: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:437: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]), array([0.04 , 0.09 , 0.1 , 4. , 4.06521739,\\n 4.13043478, 4.19565217, 4.26086957, 4.326086...48, 6.47826087, 6.54347826, 6.60869565, 6.67391304,\\n 6.73913043, 6.80434783, 6.86956522, 6.93478261, 7. ]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ".............................................................FFFFFFFFFFF [ 82%]\nFFFF.FFFFFFFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001A3AF147060>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001A3AF16BBC0>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:204: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:236: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:236: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:238: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000001A3AD95F840>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:250: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:251: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:271: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:270: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:279: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:326: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:343: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:364: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1497/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1497/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:202: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:432: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:437: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]), array([0.04 , 0.09 , 0.1 , 4. , 4.06521739,\\n 4.13043478, 4.19565217, 4.26086957, 4.326086...48, 6.47826087, 6.54347826, 6.60869565, 6.67391304,\\n 6.73913043, 6.80434783, 6.86956522, 6.93478261, 7. ]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n25 failed, 62 passed in 34.49s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_disclosure_identifies_the_relevant_exclusion_bound", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1090, + 1092, + 1095, + 1096, + 1097, + 1098, + 1099, + 1102, + 1104, + 1105, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1126, + 1127, + 1128, + 1129, + 1131, + 1132, + 1133, + 1135, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1149, + 1150, + 1151, + 1153, + 1154, + 1155, + 1156, + 1158, + 1159, + 1162, + 1164, + 1165, + 1169, + 1171, + 1172, + 1173, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1195, + 1196, + 1197, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1211, + 1212, + 1215, + 1217, + 1219, + 1221, + 1222, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1232, + 1234, + 1236, + 1237, + 1239, + 1241, + 1242, + 1243, + 1244, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1252, + 1253, + 1255, + 1260, + 1261, + 1262, + 1266, + 1267, + 1268, + 1269, + 1271, + 1272, + 1274, + 1275, + 1277, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1285, + 1287, + 1288, + 1289, + 1291, + 1292, + 1293, + 1294, + 1295, + 1296, + 1298, + 1299, + 1300, + 1302, + 1303, + 1304, + 1305, + 1306, + 1308, + 1309, + 1312, + 1314, + 1316, + 1317, + 1318, + 1319, + 1320, + 1321, + 1323, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1332, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1343, + 1351, + 1356, + 1359, + 1360, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1371, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1386, + 1387, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1414, + 1415, + 1417, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1426, + 1427, + 1428, + 1429, + 1430, + 1432, + 1433, + 1434, + 1435, + 1437, + 1440, + 1441, + 1442, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1455, + 1456, + 1457, + 1458, + 1460, + 1461, + 1462, + 1463, + 1464, + 1466, + 1467, + 1468, + 1470, + 1475, + 1478, + 1481, + 1482, + 1483, + 1484, + 1485, + 1487, + 1488, + 1489, + 1490, + 1493, + 1494, + 1495, + 1498, + 1499, + 1501, + 1502, + 1504, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1516, + 1517, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1529, + 1530, + 1531, + 1532, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1558, + 1559, + 1560, + 1562, + 1563, + 1564, + 1565, + 1567, + 1568, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1582, + 1583, + 1584, + 1585, + 1587, + 1588, + 1589, + 1590, + 1592, + 1593, + 1594, + 1596, + 1599, + 1600, + 1601, + 1604, + 1605, + 1607, + 1608, + 1609, + 1612, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1620, + 1621, + 1622, + 1623, + 1624, + 1625, + 1627, + 1628, + 1629, + 1630, + 1631, + 1633, + 1634, + 1635, + 1636, + 1638, + 1643, + 1647, + 1648, + 1649, + 1650, + 1651, + 1652, + 1654, + 1655, + 1656, + 1657, + 1658, + 1660, + 1662, + 1664, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1675, + 1676, + 1678, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1690, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1703, + 1704, + 1705, + 1706, + 1707, + 1709, + 1711, + 1712, + 1714, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1724, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1736, + 1752, + 1753, + 1754, + 1755, + 1756, + 1757, + 1759, + 1761, + 1762, + 1763, + 1764, + 1765, + 1767, + 1768, + 1769, + 1771, + 1776, + 1777, + 1790, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1798, + 1799, + 1800, + 1801, + 1802, + 1803, + 1806, + 1808, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1819, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1832, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1845, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1854, + 1855, + 1856, + 1857, + 1860, + 1861, + 1862, + 1865, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1875, + 1876, + 1877, + 1879, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1890, + 1911, + 1912, + 1915, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1925, + 1927, + 1928, + 1931, + 1932, + 1933, + 1934, + 1935, + 1936, + 1938, + 1939, + 1940, + 1941, + 1942, + 1943, + 1945, + 1946, + 1947, + 1949, + 1951, + 1955, + 1956, + 1960, + 1961, + 1962, + 1963, + 1965, + 1966, + 1967, + 1969, + 1970, + 1972, + 1973, + 1974, + 1975, + 1976, + 1978, + 1979, + 1980, + 1982, + 1983, + 1984, + 1986, + 1987, + 1988, + 1989, + 1991, + 1992, + 1993, + 1995, + 1996, + 1998, + 1999, + 2000, + 2002, + 2006, + 2007, + 2011, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2021, + 2022, + 2024, + 2025, + 2026, + 2027, + 2028, + 2029, + 2031, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2045, + 2046, + 2048, + 2049, + 2050, + 2054, + 2061, + 2064, + 2067, + 2068, + 2069, + 2071, + 2072, + 2073, + 2075, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2085, + 2086, + 2087, + 2088, + 2089, + 2091, + 2092, + 2094, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2106, + 2107, + 2109, + 2112, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2121, + 2122, + 2124, + 2125, + 2127, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2136, + 2137, + 2139, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2148, + 2149, + 2150, + 2152, + 2153, + 2154, + 2155, + 2157, + 2158, + 2159, + 2161, + 2165, + 2169, + 2170, + 2171, + 2172, + 2174, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2185, + 2186, + 2188, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2198, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2206, + 2207, + 2208, + 2209, + 2213, + 2218, + 2219, + 2220, + 2223, + 2224, + 2226, + 2229, + 2230, + 2232, + 2233, + 2234, + 2235, + 2237, + 2238, + 2240, + 2241, + 2242, + 2243, + 2245, + 2246, + 2247, + 2249, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2259, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2268, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2278, + 2279, + 2280, + 2281, + 2282, + 2283, + 2287, + 2292, + 2296, + 2297, + 2298, + 2299, + 2301, + 2302, + 2303, + 2304, + 2305, + 2307, + 2308, + 2313, + 2314, + 2315, + 2316, + 2319, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2527, + 2528, + 2529, + 2543, + 2557, + 2558, + 2559, + 2560, + 2563, + 2564, + 2566, + 2567, + 2568, + 2569, + 2570, + 2571, + 2572, + 2574, + 2576, + 2577, + 2578, + 2581, + 2582, + 2591, + 2592, + 2593, + 2595, + 2596, + 2598, + 2602, + 2603, + 2604, + 2605, + 2606, + 2608, + 2611, + 2612, + 2614, + 2615, + 2616, + 2617, + 2618, + 2619, + 2620, + 2621, + 2622, + 2623, + 2624, + 2625, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2633, + 2634, + 2635, + 2637, + 2639, + 2640, + 2641, + 2642, + 2643, + 2644, + 2645, + 2646, + 2647, + 2649, + 2650, + 2651, + 2652, + 2654, + 2655, + 2657, + 2658, + 2659, + 2661, + 2662, + 2663, + 2665, + 2670, + 2671, + 2674, + 2675, + 2678, + 2679, + 2680, + 2711, + 2712, + 2715, + 2717, + 2718, + 2719, + 2720, + 2724, + 2725, + 2726, + 2727, + 2728, + 2729, + 2733, + 2734, + 2735, + 2736, + 2737, + 2738, + 2741, + 2742, + 2743, + 2744, + 2745, + 2746, + 2747, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2771, + 2772, + 2774, + 2775, + 2777, + 2778, + 2779, + 2780, + 2781, + 2782, + 2783, + 2785, + 2786, + 2787, + 2788, + 2790, + 2791, + 2792, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2859, + 2865, + 2866, + 2869, + 2871, + 2872, + 2873, + 2874, + 2875, + 2877, + 2879, + 2880, + 2882, + 2883, + 2885, + 2891, + 2892, + 2893, + 2894, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2906, + 2907, + 2908, + 2909, + 2911, + 2912, + 2913, + 2914, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2924, + 2926, + 2928, + 2930, + 2931, + 2932, + 2942, + 2943, + 2944, + 2945, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2954, + 2955, + 2956, + 2957, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2966, + 2967, + 2968, + 2970, + 2971, + 2973, + 2974, + 2976, + 2977, + 2979, + 2982, + 2995, + 2996, + 2997, + 2999, + 3000, + 3001, + 3002, + 3004, + 3005, + 3006, + 3011, + 3012, + 3013, + 3014, + 3016, + 3017, + 3026, + 3027, + 3028, + 3031, + 3034, + 3035, + 3037, + 3038, + 3039, + 3040, + 3041, + 3042, + 3043, + 3044, + 3046, + 3047, + 3048, + 3049, + 3050, + 3052, + 3053, + 3054, + 3055, + 3056, + 3057, + 3058, + 3060, + 3064, + 3065, + 3066, + 3067, + 3068, + 3069, + 3070, + 3071, + 3073, + 3074, + 3075, + 3076, + 3077, + 3078, + 3082, + 3083, + 3084, + 3085, + 3086, + 3087, + 3088, + 3089, + 3091, + 3092, + 3093, + 3094, + 3095, + 3096, + 3097, + 3101, + 3102, + 3103, + 3104, + 3105, + 3106, + 3107, + 3108, + 3110, + 3111, + 3112, + 3113, + 3114, + 3115, + 3116, + 3122, + 3125, + 3138, + 3139, + 3140, + 3141, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3151, + 3152, + 3153, + 3156, + 3157, + 3158, + 3159, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3167, + 3168, + 3169, + 3170, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3184, + 3185, + 3186, + 3187, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3199, + 3200, + 3201, + 3202, + 3204, + 3205, + 3207, + 3208, + 3209, + 3210, + 3212, + 3213, + 3215, + 3216, + 3218, + 3219 + ], + "stdout": "........................................................................ [ 82%]\n............... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-didegrjk\\result.xml -\n87 passed in 42.67s\n", + "stderr": "" + } + } + ], + "executed_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/proofs_dimred_visualizer.py": "6907249c50b205febac0e87ebdeb537dcd9d58ba7eadeaa4320cfd460a7ce1fb", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "d0b744c8b12e6d7d22923691bcac15f5d03b00d946941cf641b124421a2767ea", + "tests/test_visualizer_review_contracts.py": "17163a01b61f7497d12e4c313e6870ac31c75314301323b07c76d30e0e3dbd9b" + }, + "protected_unchanged": true +} diff --git a/audit/m28_review_frozen_validation_results.json b/audit/m28_review_frozen_validation_results.json new file mode 100644 index 0000000..f087004 --- /dev/null +++ b/audit/m28_review_frozen_validation_results.json @@ -0,0 +1,151 @@ +{ + "active_head": "0c06cfd497579c5f99fd957c97ca28a052494bd4", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "executable": "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "versions": { + "numpy": "2.4.6", + "pandas": "3.1.1", + "scipy": "1.17.1", + "scikit-learn": "1.9.1", + "matplotlib": "3.11.2", + "pytest": "8.4.2", + "black": "24.4.2", + "ruff": "0.5.0", + "pillow": "13.0.0" + }, + "effective_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/visualizer_review_contracts.py": "d0b744c8b12e6d7d22923691bcac15f5d03b00d946941cf641b124421a2767ea", + "tests/test_visualizer_review_contracts.py": "17163a01b61f7497d12e4c313e6870ac31c75314301323b07c76d30e0e3dbd9b", + "audit/check_m28_evidence.py": "f0b8f438e79b3dc3ea5f42a6f6e530316bf93fd2a4ac9b848333e3c6c363188e", + "audit/check_m28_boundaries.py": "72f0c956c8719acafe0d9c07fa05e93c3f4d69ce297a8befeccef73bad4cdfb0", + "audit/check_m28_validation.py": "fda730977f875e9b951171a89e5e14d44ca0fa7524e2c7651e45d743bc581e1b", + "audit/check_m28_review.py": "1691981d66db6f38b7d66743d648820bde9d3389f30f42f17b65bc06dc6afadd" + }, + "commands": [ + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-W", + "error", + "--junitxml=test-results/m28-targeted-validation.xml" + ], + "exit_code": 0, + "stdout": "............................................................. [100%]\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-targeted-validation.xml -\n61 passed in 7.95s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "--junitxml=test-results/m28-complete-validation.xml" + ], + "exit_code": 0, + "stdout": "........................................................................ [ 10%]\n........................................................................ [ 20%]\n........................................................................ [ 31%]\n........................................................................ [ 41%]\n........................................................................ [ 51%]\n........................................................................ [ 62%]\n........................................................................ [ 72%]\n........................................................................ [ 83%]\n........................................................................ [ 93%]\n............................................. [100%]\n============================== warnings summary ===============================\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_partial_esa_supplement_merges_without_losing_xmatch_rows\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_bulk_without_matches_stops_auto_fallback\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_cone_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_retry_limit_raises_or_falls_back_by_mode\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_transient_failure_retries_then_succeeds\n C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\tools\\gaia_crossmatcher.py:1210: Pandas4Warning: The inplace keyword in DataFrame.drop is deprecated and will be removed in a future version (PDEP-8).\n See https://pandas.pydata.org/docs/dev/whatsnew/v3.1.0.html#deprecation-inplace for more details.\n df_merged.drop(columns=[\"objid\"], inplace=True, errors=\"ignore\")\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-complete-validation.xml -\n693 passed, 62 deselected, 7 warnings in 23.77s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "--import-mode=importlib", + "--junitxml=test-results/m28-importlib-validation.xml" + ], + "exit_code": 0, + "stdout": "........................................................................ [ 10%]\n........................................................................ [ 20%]\n........................................................................ [ 31%]\n........................................................................ [ 41%]\n........................................................................ [ 51%]\n........................................................................ [ 62%]\n........................................................................ [ 72%]\n........................................................................ [ 83%]\n........................................................................ [ 93%]\n............................................. [100%]\n============================== warnings summary ===============================\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_partial_esa_supplement_merges_without_losing_xmatch_rows\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_bulk_without_matches_stops_auto_fallback\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_cone_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_retry_limit_raises_or_falls_back_by_mode\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_transient_failure_retries_then_succeeds\n C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\tools\\gaia_crossmatcher.py:1210: Pandas4Warning: The inplace keyword in DataFrame.drop is deprecated and will be removed in a future version (PDEP-8).\n See https://pandas.pydata.org/docs/dev/whatsnew/v3.1.0.html#deprecation-inplace for more details.\n df_merged.drop(columns=[\"objid\"], inplace=True, errors=\"ignore\")\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-importlib-validation.xml -\n693 passed, 62 deselected, 7 warnings in 23.40s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "black", + "--check", + "src", + "tests", + "scripts", + "app.py", + "audit/check_m28_evidence.py", + "audit/check_m28_boundaries.py", + "audit/check_m28_validation.py", + "audit/check_m28_review.py" + ], + "exit_code": 0, + "stdout": "", + "stderr": "All done! \u2728 \ud83c\udf70 \u2728\n48 files would be left unchanged.\n" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "ruff", + "check", + "src", + "tests", + "scripts", + "app.py", + "audit/check_m28_evidence.py", + "audit/check_m28_boundaries.py", + "audit/check_m28_validation.py", + "audit/check_m28_review.py" + ], + "exit_code": 0, + "stdout": "All checks passed!\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pip", + "check" + ], + "exit_code": 0, + "stdout": "No broken requirements found.\n", + "stderr": "" + }, + { + "command": [ + "git", + "diff", + "--check" + ], + "exit_code": 0, + "stdout": "", + "stderr": "" + }, + { + "command": [ + "git", + "diff", + "--exit-code", + "39dad874610745ccd456d26972e90f6fb3a11405", + "--", + "src", + "notebooks", + "data", + "models", + "requirements", + "pyproject.toml", + ".github", + "app.py", + "AGENTS.md" + ], + "exit_code": 0, + "stdout": "", + "stderr": "" + } + ], + "all_commands_passed": true +} diff --git a/audit/m28_review_geometry_final_results.json b/audit/m28_review_geometry_final_results.json new file mode 100644 index 0000000..1eeddf2 --- /dev/null +++ b/audit/m28_review_geometry_final_results.json @@ -0,0 +1,10051 @@ +{ + "active_head": "4364c61f56d91f7ec93c5c6072b9f88c46023241", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "working_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7fd6d4164a9bd50a52e3a47e79eef197c7963dcc6cd5e96be4231383e7ca3a25", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3" + }, + "runs": [ + { + "name": "C13", + "selection": "kde_labeled_regions", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "29d8c4c1e860508b96cdce82bf78feba2c48b5f74fb65984d9736dc44c8ddfee", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-hsu4cu6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 16.90s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-hsu4cu6h\\result.xml -\n5 passed, 81 deselected in 25.54s\n", + "stderr": "" + } + }, + { + "name": "K4", + "selection": "kde_labeled_regions", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,15 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ draws = kde.resample(200000, seed=np.random.default_rng(7))\n+ density = kde.evaluate(draws)\n+ levels = sorted(float(np.quantile(density,1-p)) for p in [.99,.95,.68])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "f5353c35e24c3908f14540eb69100b0026502a508ea8e34823764b12bca1ecb7", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-hsu4cu6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 17.03s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2442, + 2443, + 2444, + 2445, + 2448, + 2449, + 2450, + 2452, + 2453, + 2454, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2469, + 2470, + 2472, + 2473, + 2475, + 2476, + 2478, + 2480, + 2481, + 2482, + 2483, + 2484, + 2485, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2493, + 2494, + 2495, + 2496, + 2497, + 2498, + 2499, + 2501, + 2502, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2512, + 2518, + 2657, + 2662, + 2663, + 2786, + 2790, + 2848, + 2854, + 2855, + 2968, + 2971 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-hsu4cu6h\\result.xml -\n5 passed, 81 deselected in 28.46s\n", + "stderr": "" + } + }, + { + "name": "K5", + "selection": "kde_labeled_regions", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,20 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ sigma = np.sqrt(np.diag(kde.covariance))\n+ qx = np.linspace(kde.dataset[0].min()-4*sigma[0],kde.dataset[0].max()+4*sigma[0],500)\n+ qy = np.linspace(kde.dataset[1].min()-4*sigma[1],kde.dataset[1].max()+4*sigma[1],500)\n+ a,b = np.meshgrid(qx,qy)\n+ density = kde(np.vstack([a.ravel(),b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "ae151ba113c3b6bbaf69e6bc068592e34087bd1c03b58c4f5ea8281b75c44d42", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-hsu4cu6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 17.10s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2442, + 2443, + 2444, + 2445, + 2447, + 2448, + 2449, + 2450, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2461, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2474, + 2475, + 2477, + 2478, + 2480, + 2481, + 2483, + 2485, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2506, + 2507, + 2509, + 2510, + 2511, + 2513, + 2514, + 2515, + 2517, + 2523, + 2662, + 2667, + 2668, + 2791, + 2795, + 2853, + 2859, + 2860, + 2973, + 2976 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-hsu4cu6h\\result.xml -\n5 passed, 81 deselected in 29.91s\n", + "stderr": "" + } + }, + { + "name": "K1B", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,14 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ peak=float(ZZ.max())\n+ levels=sorted((1-p)*peak for p in [.99,.95,.68])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "c7440409300cf121262065ba00ef3d8ec697b80fd48d35bae00e9d1e10bccafe", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-hsu4cu6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 16.67s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01325009\nE Max relative difference among violations: 0.01948543\nE ACTUAL: array(0.66675)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.06514077\nE Max relative difference among violations: 0.09579524\nE ACTUAL: array(0.614859)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 95% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00763319\nE Max relative difference among violations: 0.00803493\nE ACTUAL: array(0.957633)\nE DESIRED: array(0.95)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.07977581\nE Max relative difference among violations: 0.11731737\nE ACTUAL: array(0.600224)\nE DESIRED: array(0.68)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2436, + 2437, + 2438, + 2439, + 2441, + 2442, + 2443, + 2444, + 2447, + 2448, + 2449, + 2451, + 2452, + 2453, + 2455, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2466, + 2468, + 2469, + 2471, + 2472, + 2474, + 2475, + 2477, + 2479, + 2480, + 2481, + 2482, + 2483, + 2484, + 2485, + 2486, + 2487, + 2488, + 2489, + 2490, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2498, + 2500, + 2501, + 2503, + 2504, + 2505, + 2507, + 2508, + 2509, + 2511, + 2517, + 2656, + 2661, + 2662, + 2785, + 2789, + 2847, + 2853, + 2854, + 2967, + 2970 + ], + "stdout": "F.FFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01325009\nE Max relative difference among violations: 0.01948543\nE ACTUAL: array(0.66675)\nE DESIRED: array(0.68)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.06514077\nE Max relative difference among violations: 0.09579524\nE ACTUAL: array(0.614859)\nE DESIRED: array(0.68)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 95% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00763319\nE Max relative difference among violations: 0.00803493\nE ACTUAL: array(0.957633)\nE DESIRED: array(0.95)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.07977581\nE Max relative difference among violations: 0.11731737\nE ACTUAL: array(0.600224)\nE DESIRED: array(0.68)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-hsu4cu6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n4 failed, 1 passed, 81 deselected in 18.47s\n", + "stderr": "" + } + }, + { + "name": "K6", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2475 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2485,7 +2476,7 @@\n cs,\n # Labels textuels 99/95/68% align\u00e9s aux niveaux calcul\u00e9s.\n fmt={\n- lv: nm for lv, nm in zip(levels, [\"99%\", \"95%\", \"68%\"][-n_lv:])\n+ lv: nm for lv, nm in zip(levels, [\"68%\", \"95%\", \"99%\"][-n_lv:])\n },\n fontsize=7,\n inline=True,\n", + "candidate_sha256": "0473bb1fd282d2ae32f067cc1cd2885486cf75b9cfc70ccd7fae3dd9aacc0ebf", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-hsu4cu6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 16.76s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3100187\nE Max relative difference among violations: 0.45590985\nE ACTUAL: array(0.990019)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997108\nE Max relative difference among violations: 0.45583983\nE ACTUAL: array(0.989971)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997656\nE Max relative difference among violations: 0.45584788\nE ACTUAL: array(0.989977)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31000088\nE Max relative difference among violations: 0.45588364\nE ACTUAL: array(0.990001)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31002934\nE Max relative difference among violations: 0.4559255\nE ACTUAL: array(0.990029)\nE DESIRED: array(0.68)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3100187\nE Max relative difference among violations: 0.45590985\nE ACTUAL: array(0.990019)\nE DESIRED: array(0.68)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997108\nE Max relative difference among violations: 0.45583983\nE ACTUAL: array(0.989971)\nE DESIRED: array(0.68)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997656\nE Max relative difference among violations: 0.45584788\nE ACTUAL: array(0.989977)\nE DESIRED: array(0.68)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31000088\nE Max relative difference among violations: 0.45588364\nE ACTUAL: array(0.990001)\nE DESIRED: array(0.68)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31002934\nE Max relative difference among violations: 0.4559255\nE ACTUAL: array(0.990029)\nE DESIRED: array(0.68)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-hsu4cu6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 22.77s\n", + "stderr": "" + } + }, + { + "name": "K7", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2424 + ], + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ] + ], + "patch": "--- \n+++ \n@@ -2421,33 +2421,24 @@\n # Sous-\u00e9chantillon pour stabiliser le co\u00fbt de la KDE.\n idx = rng.choice(len(Z_stars), N_KDE, replace=False)\n logger.info(\"Calcul KDE sur %d \u00e9toiles...\", N_KDE)\n- kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n+ kde = gaussian_kde(Z_ae.T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "5c14d1ded1f2fe64555f2b2c4a9b034c375610f1fbbad8333c1474264a5a096e", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-hsu4cu6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 16.85s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x0000028146F86500>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000002814252C660>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x00000281425B7760>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "..FFF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x0000028146F86500>)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000002814252C660>)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x00000281425B7760>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-hsu4cu6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n3 failed, 2 passed, 81 deselected in 14.38s\n", + "stderr": "" + } + }, + { + "name": "K8", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2465 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2474,7 +2465,7 @@\n cs = ax.contour(\n XX,\n YY,\n- ZZ,\n+ ZZ.T,\n levels=levels,\n colors=[\"#4A4A4A\", \"#2A2A2A\", \"#0A0A0A\"][-n_lv:],\n linewidths=[0.8, 1.2, 1.8][-n_lv:],\n", + "candidate_sha256": "c833f6f75c4e376a04cc2eea5031910643373a69836d06cd20e56e18f97f664b", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-hsu4cu6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 16.45s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01294495\nE Max relative difference among violations: 0.0130757\nE ACTUAL: array(0.977055)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:147: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0.05, atol=1e-10\nE Contour vertices are not on the fitted STAR iso-density\nE Mismatched elements: 425 / 457 (93%)\nE First 5 mismatches are at indices:\nE [0]: 8.749356970086692e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [1]: 8.648096934890717e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [2]: 8.559249232877267e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [3]: 8.481673619124976e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [4]: 8.414570496859691e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE Max absolute difference among violations: 0.00044197\nE Max relative difference among violations: 1.66420284\nE ACTUAL: array([8.749357e-05, 8.648097e-05, 8.559249e-05, 8.481674e-05,\nE 8.414570e-05, 8.357454e-05, 8.310137e-05, 8.272715e-05,\nE 8.245573e-05, 8.229383e-05, 8.229396e-05, 8.204398e-05,...\nE DESIRED: array(0.000266)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.22685682\nE Max relative difference among violations: 0.2291483\nE ACTUAL: array(0.763143)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3138107\nE Max relative difference among violations: 0.31698051\nE ACTUAL: array(0.676189)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.27101919\nE Max relative difference among violations: 0.27375676\nE ACTUAL: array(0.718981)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01294495\nE Max relative difference among violations: 0.0130757\nE ACTUAL: array(0.977055)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:147: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0.05, atol=1e-10\nE Contour vertices are not on the fitted STAR iso-density\nE Mismatched elements: 425 / 457 (93%)\nE First 5 mismatches are at indices:\nE [0]: 8.749356970086692e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [1]: 8.648096934890717e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [2]: 8.559249232877267e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [3]: 8.481673619124976e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [4]: 8.414570496859691e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE Max absolute difference among violations: 0.00044197\nE Max relative difference among violations: 1.66420284\nE ACTUAL: array([8.749357e-05, 8.648097e-05, 8.559249e-05, 8.481674e-05,\nE 8.414570e-05, 8.357454e-05, 8.310137e-05, 8.272715e-05,\nE 8.245573e-05, 8.229383e-05, 8.229396e-05, 8.204398e-05,...\nE DESIRED: array(0.000266)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.22685682\nE Max relative difference among violations: 0.2291483\nE ACTUAL: array(0.763143)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3138107\nE Max relative difference among violations: 0.31698051\nE ACTUAL: array(0.676189)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.27101919\nE Max relative difference among violations: 0.27375676\nE ACTUAL: array(0.718981)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-hsu4cu6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 23.68s\n", + "stderr": "" + } + }, + { + "name": "K9", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2465 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2474,7 +2465,7 @@\n cs = ax.contour(\n XX,\n YY,\n- ZZ,\n+ np.ma.masked_where(XX > 3, ZZ),\n levels=levels,\n colors=[\"#4A4A4A\", \"#2A2A2A\", \"#0A0A0A\"][-n_lv:],\n linewidths=[0.8, 1.2, 1.8][-n_lv:],\n", + "candidate_sha256": "7371291f3dffc0a862a6f8af606664cd85a80726f6d05444494d29a5f3e3c15a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-hsu4cu6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 16.29s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.05631876\nE Max relative difference among violations: 0.05688764\nE ACTUAL: array(0.933681)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.06331658\nE Max relative difference among violations: 0.06395614\nE ACTUAL: array(0.926683)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.29256688\nE Max relative difference among violations: 0.2955221\nE ACTUAL: array(0.697433)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30004933\nE Max relative difference among violations: 0.30308013\nE ACTUAL: array(0.689951)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30314268\nE Max relative difference among violations: 0.30620472\nE ACTUAL: array(0.686857)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.05631876\nE Max relative difference among violations: 0.05688764\nE ACTUAL: array(0.933681)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.06331658\nE Max relative difference among violations: 0.06395614\nE ACTUAL: array(0.926683)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.29256688\nE Max relative difference among violations: 0.2955221\nE ACTUAL: array(0.697433)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30004933\nE Max relative difference among violations: 0.30308013\nE ACTUAL: array(0.689951)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30314268\nE Max relative difference among violations: 0.30620472\nE ACTUAL: array(0.686857)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-hsu4cu6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 23.32s\n", + "stderr": "" + } + }, + { + "name": "JOINT", + "selection": "", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 154 + ], + [ + 185 + ], + [ + 288 + ], + [ + 869 + ], + [ + 1018 + ], + [ + 1087 + ], + [ + 1110 + ], + [ + 1178, + 1179 + ], + [ + 1252 + ], + [ + 1319 + ], + [ + 1414 + ], + [ + 1559 + ], + [ + 2019 + ], + [ + 2040 + ], + [ + 2068 + ], + [ + 2278 + ], + [ + 2320 + ], + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2527, + 2528 + ], + [ + 2816 + ], + [ + 2827, + 2828, + 2829 + ], + [ + 3035 + ], + [ + 3209 + ] + ], + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, 100 * ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"{n_thresh} PCs\\n\u2192 {pca_analyzer.explained_variance_ratio[:n_thresh].sum()*100:.1f}%\",\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n@@ -285,7 +285,7 @@\n df = df.sort_values(\"loading\")\n \n # Couleur encodant le signe physique de la contribution.\n- colors = [\"#DD8452\" if v < 0 else \"#4C72B0\" for v in df[\"loading\"]]\n+ colors = [\"#CC5500\" if v < 0 else \"#0055CC\" for v in df[\"loading\"]]\n fig, ax = plt.subplots(figsize=(8, max(4, n_top * 0.35)), dpi=self.dpi)\n \n ax.barh(\n@@ -869,7 +869,7 @@\n ax.text(\n lam,\n ymax * 0.88,\n- nom,\n+ nom.replace(chr(92)*2, chr(92)),\n rotation=90,\n fontsize=6,\n color=\"crimson\",\n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ fig.canvas.print_figure(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n@@ -1084,9 +1084,7 @@\n \"Autoencodeur \u2014 Historique d'entra\u00eenement (LAMOST DR5)\", fontsize=13, y=1.02\n )\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_training_history\")\n return fig, axes\n \n def plot_ae_embedding(self, Z, meta, y, save_path=None):\n@@ -1109,6 +1107,7 @@\n \n PALETTE = {\"STAR\": \"#4C72B0\", \"GALAXY\": \"#DD8452\", \"QSO\": \"#55A868\"}\n MARKERS = {\"STAR\": \"o\", \"GALAXY\": \"s\", \"QSO\": \"^\"}\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -1176,6 +1175,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in axes[len(idx):]:\n+ unused.set_visible(False)\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n@@ -1248,9 +1249,7 @@\n ax.legend(fontsize=9)\n ax.grid(True, alpha=0.3)\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_ae_vs_pca\")\n return fig, ax\n \n def plot_latent_interpolation(\n@@ -1317,7 +1316,7 @@\n classes = np.unique(y)\n palette = [\"#4C72B0\", \"#DD8452\", \"#55A868\", \"#C44E52\"]\n fig, ax = plt.subplots(figsize=(9, 5), dpi=self.dpi)\n- for cls, color in zip(classes, palette):\n+ for cls, color in zip(classes, palette*((len(classes)+len(palette)-1)//len(palette))):\n mask = y == cls\n vals = mse_per_sample[mask]\n # Histogrammes normalis\u00e9s pour comparer les formes de distribution.\n@@ -1413,7 +1412,7 @@\n ),\n )\n sm = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n@@ -1558,7 +1557,7 @@\n )\n ax.grid(True, alpha=0.2)\n sm2 = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm2.set_array([])\n plt.colorbar(\n@@ -2017,7 +2016,7 @@\n ncols = 4\n nrows = (n_show + ncols - 1) // ncols\n fig, axes = plt.subplots(nrows, ncols, figsize=(5 * ncols, 4 * nrows), dpi=120)\n- axes_flat = axes.flatten() if n_show > 1 else [axes]\n+ axes_flat = np.asarray(axes).ravel()\n \n for ax_i, cid in zip(axes_flat, top_cids):\n profile = cluster_means.loc[cid]\n@@ -2038,7 +2037,7 @@\n ax_i.set_xlabel(\"Score moyen (\u03c3)\", fontsize=8)\n ax_i.grid(axis=\"x\", alpha=0.3)\n ax_i.set_xlim(-3, 3)\n- for ax_i in axes_flat[n_show:]:\n+ for ax_i in axes_flat[len(top_cids):]:\n ax_i.axis(\"off\")\n fig.suptitle(\n \"Top-5 features caract\u00e9ristiques par cluster HDBSCAN\\n\"\n@@ -2066,7 +2065,7 @@\n \n # V\u00e9rifie si une vraie probabilit\u00e9 est disponible.\n classes_pred = sorted(set(y_pred))\n- has_proba = confidence is not None and not np.all(confidence == 1.0)\n+ has_proba = confidence is not None\n fig, axes = plt.subplots(1, 3, figsize=(22, 8), dpi=self.dpi)\n \n ax = axes[0]\n@@ -2276,7 +2275,7 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0, 1.01)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n@@ -2318,6 +2317,7 @@\n ]\n \n fig, axes = plt.subplots(1, 1 + len(available), figsize=(22, 5), dpi=self.dpi)\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2533,6 +2524,8 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ if not (len(X) == len(X_recon) == len(spectral_types)):\n+ raise RuntimeError(\"Observation alignment: incompatible lengths\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n@@ -2821,7 +2814,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(max(vals.min(), np.finfo(float).tiny)), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n@@ -2831,6 +2824,9 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls}: excluded {missing} of {len(vals)} outside support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n@@ -3054,7 +3050,7 @@\n MS_G_HOT + (MS_G_COOL - MS_G_HOT) * 0.35,\n ),\n (T_LO + (T_HI - T_LO) * 0.25, MS_G_COOL - 0.10),\n- (T_LO + T_PAD, G_HI - T_PAD * 2),\n+ (T_LO + T_PAD, G_HI - G_PAD * 2),\n (T_LO + T_PAD, G_HI - G_PAD),\n (T_LO + (T_HI - T_LO) * 0.20, MS_G_COOL + MS_W * 0.6),\n (\n@@ -3212,7 +3208,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 population fournie\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "candidate_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000284AFDDAC00>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000284AEB13AE0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:204: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:238: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x00000284AEB49B60>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:250: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:251: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:271: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:270: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:279: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:326: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:343: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]))\nE + where = .exclusion_report" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:364: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1453/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1453/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:196: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:432: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:437: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "............................................................FFFFFFFFFFFF [ 83%]\nFFF.FFFFFFFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000284AFDDAC00>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000284AEB13AE0>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:204: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:238: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x00000284AEB49B60>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:250: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:251: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:271: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:270: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:279: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:326: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:343: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]))\nE + where = .exclusion_report\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:364: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1453/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1453/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:196: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:432: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:437: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-hsu4cu6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n25 failed, 61 passed in 35.74s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1090, + 1092, + 1095, + 1096, + 1097, + 1098, + 1099, + 1102, + 1104, + 1105, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1126, + 1127, + 1128, + 1129, + 1131, + 1132, + 1133, + 1135, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1149, + 1150, + 1151, + 1153, + 1154, + 1155, + 1156, + 1158, + 1159, + 1162, + 1164, + 1165, + 1169, + 1171, + 1172, + 1173, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1195, + 1196, + 1197, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1211, + 1212, + 1215, + 1217, + 1219, + 1221, + 1222, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1232, + 1234, + 1236, + 1237, + 1239, + 1241, + 1242, + 1243, + 1244, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1252, + 1253, + 1255, + 1260, + 1261, + 1262, + 1266, + 1267, + 1268, + 1269, + 1271, + 1272, + 1274, + 1275, + 1277, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1285, + 1287, + 1288, + 1289, + 1291, + 1292, + 1293, + 1294, + 1295, + 1296, + 1298, + 1299, + 1300, + 1302, + 1303, + 1304, + 1305, + 1306, + 1308, + 1309, + 1312, + 1314, + 1316, + 1317, + 1318, + 1319, + 1320, + 1321, + 1323, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1332, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1343, + 1351, + 1356, + 1359, + 1360, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1371, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1386, + 1387, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1414, + 1415, + 1417, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1426, + 1427, + 1428, + 1429, + 1430, + 1432, + 1433, + 1434, + 1435, + 1437, + 1440, + 1441, + 1442, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1455, + 1456, + 1457, + 1458, + 1460, + 1461, + 1462, + 1463, + 1464, + 1466, + 1467, + 1468, + 1470, + 1475, + 1478, + 1481, + 1482, + 1483, + 1484, + 1485, + 1487, + 1488, + 1489, + 1490, + 1493, + 1494, + 1495, + 1498, + 1499, + 1501, + 1502, + 1504, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1516, + 1517, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1529, + 1530, + 1531, + 1532, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1558, + 1559, + 1560, + 1562, + 1563, + 1564, + 1565, + 1567, + 1568, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1582, + 1583, + 1584, + 1585, + 1587, + 1588, + 1589, + 1590, + 1592, + 1593, + 1594, + 1596, + 1599, + 1600, + 1601, + 1604, + 1605, + 1607, + 1608, + 1609, + 1612, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1620, + 1621, + 1622, + 1623, + 1624, + 1625, + 1627, + 1628, + 1629, + 1630, + 1631, + 1633, + 1634, + 1635, + 1636, + 1638, + 1643, + 1647, + 1648, + 1649, + 1650, + 1651, + 1652, + 1654, + 1655, + 1656, + 1657, + 1658, + 1660, + 1662, + 1664, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1675, + 1676, + 1678, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1690, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1703, + 1704, + 1705, + 1706, + 1707, + 1709, + 1711, + 1712, + 1714, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1724, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1736, + 1752, + 1753, + 1754, + 1755, + 1756, + 1757, + 1759, + 1761, + 1762, + 1763, + 1764, + 1765, + 1767, + 1768, + 1769, + 1771, + 1776, + 1777, + 1790, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1798, + 1799, + 1800, + 1801, + 1802, + 1803, + 1806, + 1808, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1819, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1832, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1845, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1854, + 1855, + 1856, + 1857, + 1860, + 1861, + 1862, + 1865, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1875, + 1876, + 1877, + 1879, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1890, + 1911, + 1912, + 1915, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1925, + 1927, + 1928, + 1931, + 1932, + 1933, + 1934, + 1935, + 1936, + 1938, + 1939, + 1940, + 1941, + 1942, + 1943, + 1945, + 1946, + 1947, + 1949, + 1951, + 1955, + 1956, + 1960, + 1961, + 1962, + 1963, + 1965, + 1966, + 1967, + 1969, + 1970, + 1972, + 1973, + 1974, + 1975, + 1976, + 1978, + 1979, + 1980, + 1982, + 1983, + 1984, + 1986, + 1987, + 1988, + 1989, + 1991, + 1992, + 1993, + 1995, + 1996, + 1998, + 1999, + 2000, + 2002, + 2006, + 2007, + 2011, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2021, + 2022, + 2024, + 2025, + 2026, + 2027, + 2028, + 2029, + 2031, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2045, + 2046, + 2048, + 2049, + 2050, + 2054, + 2061, + 2064, + 2067, + 2068, + 2069, + 2071, + 2072, + 2073, + 2075, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2085, + 2086, + 2087, + 2088, + 2089, + 2091, + 2092, + 2094, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2106, + 2107, + 2109, + 2112, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2121, + 2122, + 2124, + 2125, + 2127, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2136, + 2137, + 2139, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2148, + 2149, + 2150, + 2152, + 2153, + 2154, + 2155, + 2157, + 2158, + 2159, + 2161, + 2165, + 2169, + 2170, + 2171, + 2172, + 2174, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2185, + 2186, + 2188, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2198, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2206, + 2207, + 2208, + 2209, + 2213, + 2218, + 2219, + 2220, + 2223, + 2224, + 2226, + 2229, + 2230, + 2232, + 2233, + 2234, + 2235, + 2237, + 2238, + 2240, + 2241, + 2242, + 2243, + 2245, + 2246, + 2247, + 2249, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2259, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2268, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2278, + 2279, + 2280, + 2281, + 2282, + 2283, + 2287, + 2292, + 2296, + 2297, + 2298, + 2299, + 2301, + 2302, + 2303, + 2304, + 2305, + 2307, + 2308, + 2313, + 2314, + 2315, + 2316, + 2319, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2527, + 2528, + 2529, + 2543, + 2557, + 2558, + 2559, + 2560, + 2563, + 2564, + 2566, + 2567, + 2568, + 2569, + 2570, + 2571, + 2572, + 2574, + 2576, + 2577, + 2578, + 2581, + 2582, + 2591, + 2592, + 2593, + 2595, + 2596, + 2598, + 2602, + 2603, + 2604, + 2605, + 2606, + 2608, + 2611, + 2612, + 2614, + 2615, + 2616, + 2617, + 2618, + 2619, + 2620, + 2621, + 2622, + 2623, + 2624, + 2625, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2633, + 2634, + 2635, + 2637, + 2639, + 2640, + 2641, + 2642, + 2643, + 2644, + 2645, + 2646, + 2647, + 2649, + 2650, + 2651, + 2652, + 2654, + 2655, + 2657, + 2658, + 2659, + 2661, + 2662, + 2663, + 2665, + 2670, + 2671, + 2674, + 2675, + 2678, + 2679, + 2680, + 2711, + 2712, + 2715, + 2717, + 2718, + 2719, + 2720, + 2724, + 2725, + 2726, + 2727, + 2728, + 2729, + 2733, + 2734, + 2735, + 2736, + 2737, + 2738, + 2741, + 2742, + 2743, + 2744, + 2745, + 2746, + 2747, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2771, + 2772, + 2774, + 2775, + 2777, + 2778, + 2779, + 2780, + 2781, + 2782, + 2783, + 2785, + 2786, + 2787, + 2788, + 2790, + 2791, + 2792, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2859, + 2865, + 2866, + 2869, + 2871, + 2872, + 2873, + 2874, + 2875, + 2877, + 2879, + 2880, + 2882, + 2883, + 2885, + 2891, + 2892, + 2893, + 2894, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2906, + 2907, + 2908, + 2909, + 2911, + 2912, + 2913, + 2914, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2924, + 2926, + 2928, + 2930, + 2931, + 2932, + 2942, + 2943, + 2944, + 2945, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2954, + 2955, + 2956, + 2957, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2966, + 2967, + 2968, + 2970, + 2971, + 2973, + 2974, + 2976, + 2977, + 2979, + 2982, + 2995, + 2996, + 2997, + 2999, + 3000, + 3001, + 3002, + 3004, + 3005, + 3006, + 3011, + 3012, + 3013, + 3014, + 3016, + 3017, + 3026, + 3027, + 3028, + 3031, + 3034, + 3035, + 3037, + 3038, + 3039, + 3040, + 3041, + 3042, + 3043, + 3044, + 3046, + 3047, + 3048, + 3049, + 3050, + 3052, + 3053, + 3054, + 3055, + 3056, + 3057, + 3058, + 3060, + 3064, + 3065, + 3066, + 3067, + 3068, + 3069, + 3070, + 3071, + 3073, + 3074, + 3075, + 3076, + 3077, + 3078, + 3082, + 3083, + 3084, + 3085, + 3086, + 3087, + 3088, + 3089, + 3091, + 3092, + 3093, + 3094, + 3095, + 3096, + 3097, + 3101, + 3102, + 3103, + 3104, + 3105, + 3106, + 3107, + 3108, + 3110, + 3111, + 3112, + 3113, + 3114, + 3115, + 3116, + 3122, + 3125, + 3138, + 3139, + 3140, + 3141, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3151, + 3152, + 3153, + 3156, + 3157, + 3158, + 3159, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3167, + 3168, + 3169, + 3170, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3184, + 3185, + 3186, + 3187, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3199, + 3200, + 3201, + 3202, + 3204, + 3205, + 3207, + 3208, + 3209, + 3210, + 3212, + 3213, + 3215, + 3216, + 3218, + 3219 + ], + "stdout": "........................................................................ [ 83%]\n.............. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-hsu4cu6h\\result.xml -\n86 passed in 50.10s\n", + "stderr": "" + } + } + ], + "executed_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7fd6d4164a9bd50a52e3a47e79eef197c7963dcc6cd5e96be4231383e7ca3a25", + "tests/proofs_dimred_visualizer.py": "6fd1f1ed7d1cc5202f8835b3e32ab838d5c9df05754e11d524af05c744f1fbd3", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3" + } +} diff --git a/audit/m28_review_geometry_results.json b/audit/m28_review_geometry_results.json new file mode 100644 index 0000000..0523853 --- /dev/null +++ b/audit/m28_review_geometry_results.json @@ -0,0 +1,9410 @@ +{ + "active_head": "4364c61f56d91f7ec93c5c6072b9f88c46023241", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "working_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7fd6d4164a9bd50a52e3a47e79eef197c7963dcc6cd5e96be4231383e7ca3a25", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3" + }, + "runs": [ + { + "name": "C13", + "selection": "kde_labeled_regions", + "admissible": true, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ] + ], + "patch": "--- \n+++ \n@@ -2430,24 +2430,15 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "6d84e14460c932c392f2cf2c66ce3ace77c7dbb5e30d9900a267d0e01875e68c", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-h9rm_y6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 16.20s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.9808682\nE Max relative difference among violations: 0.99077596\nE ACTUAL: array(0.009132)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98896167\nE Max relative difference among violations: 0.99895118\nE ACTUAL: array(0.001038)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.96826032\nE Max relative difference among violations: 0.97804072\nE ACTUAL: array(0.02174)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98707493\nE Max relative difference among violations: 0.99704539\nE ACTUAL: array(0.002925)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98753075\nE Max relative difference among violations: 0.99750581\nE ACTUAL: array(0.002469)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.9808682\nE Max relative difference among violations: 0.99077596\nE ACTUAL: array(0.009132)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98896167\nE Max relative difference among violations: 0.99895118\nE ACTUAL: array(0.001038)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.96826032\nE Max relative difference among violations: 0.97804072\nE ACTUAL: array(0.02174)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98707493\nE Max relative difference among violations: 0.99704539\nE ACTUAL: array(0.002925)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98753075\nE Max relative difference among violations: 0.99750581\nE ACTUAL: array(0.002469)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-h9rm_y6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 23.91s\n", + "stderr": "" + } + }, + { + "name": "K4", + "selection": "kde_labeled_regions", + "admissible": true, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2433, + 2434, + 2435 + ] + ], + "patch": "--- \n+++ \n@@ -2430,24 +2430,9 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ draws = kde.resample(200000, seed=np.random.default_rng(7))\n+ density = kde.evaluate(draws)\n+ levels = sorted(float(np.quantile(density,1-p)) for p in [.99,.95,.68])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "d2cc32567c0419265159ae1ab7ed09fa441dbb6910ec1ba642064acd237b0ada", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-h9rm_y6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 16.73s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98096986\nE Max relative difference among violations: 0.99087865\nE ACTUAL: array(0.00903)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98892595\nE Max relative difference among violations: 0.9989151\nE ACTUAL: array(0.001074)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.96858611\nE Max relative difference among violations: 0.97836981\nE ACTUAL: array(0.021414)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98706721\nE Max relative difference among violations: 0.99703759\nE ACTUAL: array(0.002933)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98747411\nE Max relative difference among violations: 0.9974486\nE ACTUAL: array(0.002526)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2442, + 2443, + 2444, + 2445, + 2448, + 2449, + 2450, + 2452, + 2453, + 2454, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2469, + 2470, + 2472, + 2473, + 2475, + 2476, + 2478, + 2480, + 2481, + 2482, + 2483, + 2484, + 2485, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2493, + 2494, + 2495, + 2496, + 2497, + 2498, + 2499, + 2501, + 2502, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2512, + 2518, + 2657, + 2662, + 2663, + 2786, + 2790, + 2848, + 2854, + 2855, + 2968, + 2971 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98096986\nE Max relative difference among violations: 0.99087865\nE ACTUAL: array(0.00903)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98892595\nE Max relative difference among violations: 0.9989151\nE ACTUAL: array(0.001074)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.96858611\nE Max relative difference among violations: 0.97836981\nE ACTUAL: array(0.021414)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98706721\nE Max relative difference among violations: 0.99703759\nE ACTUAL: array(0.002933)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98747411\nE Max relative difference among violations: 0.9974486\nE ACTUAL: array(0.002526)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-h9rm_y6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 25.93s\n", + "stderr": "" + } + }, + { + "name": "K5", + "selection": "kde_labeled_regions", + "admissible": true, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440 + ] + ], + "patch": "--- \n+++ \n@@ -2430,24 +2430,14 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ sigma = np.sqrt(np.diag(kde.covariance))\n+ qx = np.linspace(kde.dataset[0].min()-4*sigma[0],kde.dataset[0].max()+4*sigma[0],500)\n+ qy = np.linspace(kde.dataset[1].min()-4*sigma[1],kde.dataset[1].max()+4*sigma[1],500)\n+ a,b = np.meshgrid(qx,qy)\n+ density = kde(np.vstack([a.ravel(),b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "a9abd3173f5b345587fcd6078f88399a56f5db3e81b79124ab932bb4360800f6", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-h9rm_y6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 15.93s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98084702\nE Max relative difference among violations: 0.99075456\nE ACTUAL: array(0.009153)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98896167\nE Max relative difference among violations: 0.99895118\nE ACTUAL: array(0.001038)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.96829872\nE Max relative difference among violations: 0.97807952\nE ACTUAL: array(0.021701)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98707706\nE Max relative difference among violations: 0.99704753\nE ACTUAL: array(0.002923)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98752997\nE Max relative difference among violations: 0.99750502\nE ACTUAL: array(0.00247)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2442, + 2443, + 2444, + 2445, + 2447, + 2448, + 2449, + 2450, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2461, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2474, + 2475, + 2477, + 2478, + 2480, + 2481, + 2483, + 2485, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2506, + 2507, + 2509, + 2510, + 2511, + 2513, + 2514, + 2515, + 2517, + 2523, + 2662, + 2667, + 2668, + 2791, + 2795, + 2853, + 2859, + 2860, + 2973, + 2976 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98084702\nE Max relative difference among violations: 0.99075456\nE ACTUAL: array(0.009153)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98896167\nE Max relative difference among violations: 0.99895118\nE ACTUAL: array(0.001038)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.96829872\nE Max relative difference among violations: 0.97807952\nE ACTUAL: array(0.021701)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98707706\nE Max relative difference among violations: 0.99704753\nE ACTUAL: array(0.002923)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98752997\nE Max relative difference among violations: 0.99750502\nE ACTUAL: array(0.00247)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-h9rm_y6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 27.58s\n", + "stderr": "" + } + }, + { + "name": "K1B", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2433, + 2434 + ] + ], + "patch": "--- \n+++ \n@@ -2430,24 +2430,8 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ peak=float(ZZ.max())\n+ levels=sorted((1-p)*peak for p in [.99,.95,.68])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "127741378c98c29474550f756b7aeff962f408e65becfab57162b1968a9e176b", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-h9rm_y6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 16.46s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.9830908\nE Max relative difference among violations: 0.99302101\nE ACTUAL: array(0.006909)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98896533\nE Max relative difference among violations: 0.99895487\nE ACTUAL: array(0.001035)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98566319\nE Max relative difference among violations: 0.99561939\nE ACTUAL: array(0.004337)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98826957\nE Max relative difference among violations: 0.99825209\nE ACTUAL: array(0.00173)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98828017\nE Max relative difference among violations: 0.9982628\nE ACTUAL: array(0.00172)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2436, + 2437, + 2438, + 2439, + 2441, + 2442, + 2443, + 2444, + 2447, + 2448, + 2449, + 2451, + 2452, + 2453, + 2455, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2466, + 2468, + 2469, + 2471, + 2472, + 2474, + 2475, + 2477, + 2479, + 2480, + 2481, + 2482, + 2483, + 2484, + 2485, + 2486, + 2487, + 2488, + 2489, + 2490, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2498, + 2500, + 2501, + 2503, + 2504, + 2505, + 2507, + 2508, + 2509, + 2511, + 2517, + 2656, + 2661, + 2662, + 2785, + 2789, + 2847, + 2853, + 2854, + 2967, + 2970 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.9830908\nE Max relative difference among violations: 0.99302101\nE ACTUAL: array(0.006909)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98896533\nE Max relative difference among violations: 0.99895487\nE ACTUAL: array(0.001035)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98566319\nE Max relative difference among violations: 0.99561939\nE ACTUAL: array(0.004337)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98826957\nE Max relative difference among violations: 0.99825209\nE ACTUAL: array(0.00173)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98828017\nE Max relative difference among violations: 0.9982628\nE ACTUAL: array(0.00172)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-h9rm_y6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 18.22s\n", + "stderr": "" + } + }, + { + "name": "K6", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2475 + ] + ], + "patch": "--- \n+++ \n@@ -2430,24 +2430,15 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2485,7 +2476,7 @@\n cs,\n # Labels textuels 99/95/68% align\u00e9s aux niveaux calcul\u00e9s.\n fmt={\n- lv: nm for lv, nm in zip(levels, [\"99%\", \"95%\", \"68%\"][-n_lv:])\n+ lv: nm for lv, nm in zip(levels, [\"68%\", \"95%\", \"99%\"][-n_lv:])\n },\n fontsize=7,\n inline=True,\n", + "candidate_sha256": "31bb333104f8a1e5cdaf37c3f0ef573de4a9bfc6985d469390a357b3eb34921e", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-h9rm_y6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 16.94s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3100187\nE Max relative difference among violations: 0.45590985\nE ACTUAL: array(0.990019)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997108\nE Max relative difference among violations: 0.45583983\nE ACTUAL: array(0.989971)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997656\nE Max relative difference among violations: 0.45584788\nE ACTUAL: array(0.989977)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31000088\nE Max relative difference among violations: 0.45588364\nE ACTUAL: array(0.990001)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31002934\nE Max relative difference among violations: 0.4559255\nE ACTUAL: array(0.990029)\nE DESIRED: array(0.68)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3100187\nE Max relative difference among violations: 0.45590985\nE ACTUAL: array(0.990019)\nE DESIRED: array(0.68)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997108\nE Max relative difference among violations: 0.45583983\nE ACTUAL: array(0.989971)\nE DESIRED: array(0.68)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997656\nE Max relative difference among violations: 0.45584788\nE ACTUAL: array(0.989977)\nE DESIRED: array(0.68)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31000088\nE Max relative difference among violations: 0.45588364\nE ACTUAL: array(0.990001)\nE DESIRED: array(0.68)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31002934\nE Max relative difference among violations: 0.4559255\nE ACTUAL: array(0.990029)\nE DESIRED: array(0.68)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-h9rm_y6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 23.47s\n", + "stderr": "" + } + }, + { + "name": "K7", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2424 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ] + ], + "patch": "--- \n+++ \n@@ -2421,7 +2421,7 @@\n # Sous-\u00e9chantillon pour stabiliser le co\u00fbt de la KDE.\n idx = rng.choice(len(Z_stars), N_KDE, replace=False)\n logger.info(\"Calcul KDE sur %d \u00e9toiles...\", N_KDE)\n- kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n+ kde = gaussian_kde(Z_ae.T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n margin = (p99 - p1) * 0.15\n@@ -2430,24 +2430,15 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "de191cd7aaac6274b9040bc4f2cf38aed0b44c07d016d6556fec924e401efabe", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-h9rm_y6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 17.08s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.9808682\nE Max relative difference among violations: 0.99077596\nE ACTUAL: array(0.009132)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98896167\nE Max relative difference among violations: 0.99895118\nE ACTUAL: array(0.001038)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:104: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000002552B7C3300>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:104: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000002552D483840>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:104: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000002552D6E4D60>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.9808682\nE Max relative difference among violations: 0.99077596\nE ACTUAL: array(0.009132)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98896167\nE Max relative difference among violations: 0.99895118\nE ACTUAL: array(0.001038)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:104: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000002552B7C3300>)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:104: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000002552D483840>)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:104: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000002552D6E4D60>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-h9rm_y6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 13.99s\n", + "stderr": "" + } + }, + { + "name": "K8", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2465 + ] + ], + "patch": "--- \n+++ \n@@ -2430,24 +2430,15 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2474,7 +2465,7 @@\n cs = ax.contour(\n XX,\n YY,\n- ZZ,\n+ ZZ.T,\n levels=levels,\n colors=[\"#4A4A4A\", \"#2A2A2A\", \"#0A0A0A\"][-n_lv:],\n linewidths=[0.8, 1.2, 1.8][-n_lv:],\n", + "candidate_sha256": "cc0fa8d5a05051f39310a461d58ca3819c787f86d715eade291365f4b7bb04c3", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-h9rm_y6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 16.63s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.97858065\nE Max relative difference among violations: 0.9884653\nE ACTUAL: array(0.011419)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98870987\nE Max relative difference among violations: 0.99869684\nE ACTUAL: array(0.00129)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.84071369\nE Max relative difference among violations: 0.84920575\nE ACTUAL: array(0.149286)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.87104042\nE Max relative difference among violations: 0.87983881\nE ACTUAL: array(0.11896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.85153609\nE Max relative difference among violations: 0.86013746\nE ACTUAL: array(0.138464)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.97858065\nE Max relative difference among violations: 0.9884653\nE ACTUAL: array(0.011419)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98870987\nE Max relative difference among violations: 0.99869684\nE ACTUAL: array(0.00129)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.84071369\nE Max relative difference among violations: 0.84920575\nE ACTUAL: array(0.149286)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.87104042\nE Max relative difference among violations: 0.87983881\nE ACTUAL: array(0.11896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.85153609\nE Max relative difference among violations: 0.86013746\nE ACTUAL: array(0.138464)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-h9rm_y6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 23.98s\n", + "stderr": "" + } + }, + { + "name": "JOINT", + "selection": "", + "admissible": true, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 154 + ], + [ + 185 + ], + [ + 288 + ], + [ + 869 + ], + [ + 1018 + ], + [ + 1087 + ], + [ + 1110 + ], + [ + 1178, + 1179 + ], + [ + 1252 + ], + [ + 1319 + ], + [ + 1414 + ], + [ + 1559 + ], + [ + 2019 + ], + [ + 2040 + ], + [ + 2068 + ], + [ + 2278 + ], + [ + 2320 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2527, + 2528 + ], + [ + 2816 + ], + [ + 2827, + 2828, + 2829 + ], + [ + 3035 + ], + [ + 3209 + ] + ], + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, 100 * ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"{n_thresh} PCs\\n\u2192 {pca_analyzer.explained_variance_ratio[:n_thresh].sum()*100:.1f}%\",\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n@@ -285,7 +285,7 @@\n df = df.sort_values(\"loading\")\n \n # Couleur encodant le signe physique de la contribution.\n- colors = [\"#DD8452\" if v < 0 else \"#4C72B0\" for v in df[\"loading\"]]\n+ colors = [\"#CC5500\" if v < 0 else \"#0055CC\" for v in df[\"loading\"]]\n fig, ax = plt.subplots(figsize=(8, max(4, n_top * 0.35)), dpi=self.dpi)\n \n ax.barh(\n@@ -869,7 +869,7 @@\n ax.text(\n lam,\n ymax * 0.88,\n- nom,\n+ nom.replace(chr(92)*2, chr(92)),\n rotation=90,\n fontsize=6,\n color=\"crimson\",\n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ fig.canvas.print_figure(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n@@ -1084,9 +1084,7 @@\n \"Autoencodeur \u2014 Historique d'entra\u00eenement (LAMOST DR5)\", fontsize=13, y=1.02\n )\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_training_history\")\n return fig, axes\n \n def plot_ae_embedding(self, Z, meta, y, save_path=None):\n@@ -1109,6 +1107,7 @@\n \n PALETTE = {\"STAR\": \"#4C72B0\", \"GALAXY\": \"#DD8452\", \"QSO\": \"#55A868\"}\n MARKERS = {\"STAR\": \"o\", \"GALAXY\": \"s\", \"QSO\": \"^\"}\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -1176,6 +1175,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in axes[len(idx):]:\n+ unused.set_visible(False)\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n@@ -1248,9 +1249,7 @@\n ax.legend(fontsize=9)\n ax.grid(True, alpha=0.3)\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_ae_vs_pca\")\n return fig, ax\n \n def plot_latent_interpolation(\n@@ -1317,7 +1316,7 @@\n classes = np.unique(y)\n palette = [\"#4C72B0\", \"#DD8452\", \"#55A868\", \"#C44E52\"]\n fig, ax = plt.subplots(figsize=(9, 5), dpi=self.dpi)\n- for cls, color in zip(classes, palette):\n+ for cls, color in zip(classes, palette*((len(classes)+len(palette)-1)//len(palette))):\n mask = y == cls\n vals = mse_per_sample[mask]\n # Histogrammes normalis\u00e9s pour comparer les formes de distribution.\n@@ -1413,7 +1412,7 @@\n ),\n )\n sm = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n@@ -1558,7 +1557,7 @@\n )\n ax.grid(True, alpha=0.2)\n sm2 = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm2.set_array([])\n plt.colorbar(\n@@ -2017,7 +2016,7 @@\n ncols = 4\n nrows = (n_show + ncols - 1) // ncols\n fig, axes = plt.subplots(nrows, ncols, figsize=(5 * ncols, 4 * nrows), dpi=120)\n- axes_flat = axes.flatten() if n_show > 1 else [axes]\n+ axes_flat = np.asarray(axes).ravel()\n \n for ax_i, cid in zip(axes_flat, top_cids):\n profile = cluster_means.loc[cid]\n@@ -2038,7 +2037,7 @@\n ax_i.set_xlabel(\"Score moyen (\u03c3)\", fontsize=8)\n ax_i.grid(axis=\"x\", alpha=0.3)\n ax_i.set_xlim(-3, 3)\n- for ax_i in axes_flat[n_show:]:\n+ for ax_i in axes_flat[len(top_cids):]:\n ax_i.axis(\"off\")\n fig.suptitle(\n \"Top-5 features caract\u00e9ristiques par cluster HDBSCAN\\n\"\n@@ -2066,7 +2065,7 @@\n \n # V\u00e9rifie si une vraie probabilit\u00e9 est disponible.\n classes_pred = sorted(set(y_pred))\n- has_proba = confidence is not None and not np.all(confidence == 1.0)\n+ has_proba = confidence is not None\n fig, axes = plt.subplots(1, 3, figsize=(22, 8), dpi=self.dpi)\n \n ax = axes[0]\n@@ -2276,7 +2275,7 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0, 1.01)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n@@ -2318,6 +2317,7 @@\n ]\n \n fig, axes = plt.subplots(1, 1 + len(available), figsize=(22, 5), dpi=self.dpi)\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -2430,24 +2430,15 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2533,6 +2524,8 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ if not (len(X) == len(X_recon) == len(spectral_types)):\n+ raise RuntimeError(\"Observation alignment: incompatible lengths\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n@@ -2821,7 +2814,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(max(vals.min(), np.finfo(float).tiny)), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n@@ -2831,6 +2824,9 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls}: excluded {missing} of {len(vals)} outside support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n@@ -3054,7 +3050,7 @@\n MS_G_HOT + (MS_G_COOL - MS_G_HOT) * 0.35,\n ),\n (T_LO + (T_HI - T_LO) * 0.25, MS_G_COOL - 0.10),\n- (T_LO + T_PAD, G_HI - T_PAD * 2),\n+ (T_LO + T_PAD, G_HI - G_PAD * 2),\n (T_LO + T_PAD, G_HI - G_PAD),\n (T_LO + (T_HI - T_LO) * 0.20, MS_G_COOL + MS_W * 0.6),\n (\n@@ -3212,7 +3208,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 population fournie\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "candidate_sha256": "42b1023a70737c96ffd0049db6869f4980138caa0e0b6dea0501a483c5ebe1b0", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:162: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:177: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000250AD5A2C00>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:177: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000250AFD7BAE0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:197: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:221: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:221: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:231: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x00000250AEAE2420>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:243: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:246: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:244: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:246: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:264: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:263: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:272: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:285: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:319: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:336: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]))\nE + where = .exclusion_report" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:357: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:400: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1444/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:400: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1444/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:413: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:196: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:425: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:430: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:451: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "............................................................FFFFFFFFFFFF [ 83%]\nFFF.FFFFFFFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:123: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:162: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:177: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000250AD5A2C00>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:177: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000250AFD7BAE0>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:197: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:221: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:221: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:231: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x00000250AEAE2420>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:243: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:246: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:244: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:246: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:264: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:263: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:272: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:285: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:319: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:336: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]))\nE + where = .exclusion_report\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:357: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:400: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1444/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:400: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1444/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:413: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:196: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:425: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:430: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:451: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-h9rm_y6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n25 failed, 61 passed in 38.59s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.9808682\nE Max relative difference among violations: 0.99077596\nE ACTUAL: array(0.009132)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98896167\nE Max relative difference among violations: 0.99895118\nE ACTUAL: array(0.001038)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.96826032\nE Max relative difference among violations: 0.97804072\nE ACTUAL: array(0.02174)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98707493\nE Max relative difference among violations: 0.99704539\nE ACTUAL: array(0.002925)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98753075\nE Max relative difference among violations: 0.99750581\nE ACTUAL: array(0.002469)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1090, + 1092, + 1095, + 1096, + 1097, + 1098, + 1099, + 1102, + 1104, + 1105, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1126, + 1127, + 1128, + 1129, + 1131, + 1132, + 1133, + 1135, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1149, + 1150, + 1151, + 1153, + 1154, + 1155, + 1156, + 1158, + 1159, + 1162, + 1164, + 1165, + 1169, + 1171, + 1172, + 1173, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1195, + 1196, + 1197, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1211, + 1212, + 1215, + 1217, + 1219, + 1221, + 1222, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1232, + 1234, + 1236, + 1237, + 1239, + 1241, + 1242, + 1243, + 1244, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1252, + 1253, + 1255, + 1260, + 1261, + 1262, + 1266, + 1267, + 1268, + 1269, + 1271, + 1272, + 1274, + 1275, + 1277, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1285, + 1287, + 1288, + 1289, + 1291, + 1292, + 1293, + 1294, + 1295, + 1296, + 1298, + 1299, + 1300, + 1302, + 1303, + 1304, + 1305, + 1306, + 1308, + 1309, + 1312, + 1314, + 1316, + 1317, + 1318, + 1319, + 1320, + 1321, + 1323, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1332, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1343, + 1351, + 1356, + 1359, + 1360, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1371, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1386, + 1387, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1414, + 1415, + 1417, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1426, + 1427, + 1428, + 1429, + 1430, + 1432, + 1433, + 1434, + 1435, + 1437, + 1440, + 1441, + 1442, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1455, + 1456, + 1457, + 1458, + 1460, + 1461, + 1462, + 1463, + 1464, + 1466, + 1467, + 1468, + 1470, + 1475, + 1478, + 1481, + 1482, + 1483, + 1484, + 1485, + 1487, + 1488, + 1489, + 1490, + 1493, + 1494, + 1495, + 1498, + 1499, + 1501, + 1502, + 1504, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1516, + 1517, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1529, + 1530, + 1531, + 1532, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1558, + 1559, + 1560, + 1562, + 1563, + 1564, + 1565, + 1567, + 1568, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1582, + 1583, + 1584, + 1585, + 1587, + 1588, + 1589, + 1590, + 1592, + 1593, + 1594, + 1596, + 1599, + 1600, + 1601, + 1604, + 1605, + 1607, + 1608, + 1609, + 1612, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1620, + 1621, + 1622, + 1623, + 1624, + 1625, + 1627, + 1628, + 1629, + 1630, + 1631, + 1633, + 1634, + 1635, + 1636, + 1638, + 1643, + 1647, + 1648, + 1649, + 1650, + 1651, + 1652, + 1654, + 1655, + 1656, + 1657, + 1658, + 1660, + 1662, + 1664, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1675, + 1676, + 1678, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1690, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1703, + 1704, + 1705, + 1706, + 1707, + 1709, + 1711, + 1712, + 1714, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1724, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1736, + 1752, + 1753, + 1754, + 1755, + 1756, + 1757, + 1759, + 1761, + 1762, + 1763, + 1764, + 1765, + 1767, + 1768, + 1769, + 1771, + 1776, + 1777, + 1790, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1798, + 1799, + 1800, + 1801, + 1802, + 1803, + 1806, + 1808, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1819, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1832, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1845, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1854, + 1855, + 1856, + 1857, + 1860, + 1861, + 1862, + 1865, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1875, + 1876, + 1877, + 1879, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1890, + 1911, + 1912, + 1915, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1925, + 1927, + 1928, + 1931, + 1932, + 1933, + 1934, + 1935, + 1936, + 1938, + 1939, + 1940, + 1941, + 1942, + 1943, + 1945, + 1946, + 1947, + 1949, + 1951, + 1955, + 1956, + 1960, + 1961, + 1962, + 1963, + 1965, + 1966, + 1967, + 1969, + 1970, + 1972, + 1973, + 1974, + 1975, + 1976, + 1978, + 1979, + 1980, + 1982, + 1983, + 1984, + 1986, + 1987, + 1988, + 1989, + 1991, + 1992, + 1993, + 1995, + 1996, + 1998, + 1999, + 2000, + 2002, + 2006, + 2007, + 2011, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2021, + 2022, + 2024, + 2025, + 2026, + 2027, + 2028, + 2029, + 2031, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2045, + 2046, + 2048, + 2049, + 2050, + 2054, + 2061, + 2064, + 2067, + 2068, + 2069, + 2071, + 2072, + 2073, + 2075, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2085, + 2086, + 2087, + 2088, + 2089, + 2091, + 2092, + 2094, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2106, + 2107, + 2109, + 2112, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2121, + 2122, + 2124, + 2125, + 2127, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2136, + 2137, + 2139, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2148, + 2149, + 2150, + 2152, + 2153, + 2154, + 2155, + 2157, + 2158, + 2159, + 2161, + 2165, + 2169, + 2170, + 2171, + 2172, + 2174, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2185, + 2186, + 2188, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2198, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2206, + 2207, + 2208, + 2209, + 2213, + 2218, + 2219, + 2220, + 2223, + 2224, + 2226, + 2229, + 2230, + 2232, + 2233, + 2234, + 2235, + 2237, + 2238, + 2240, + 2241, + 2242, + 2243, + 2245, + 2246, + 2247, + 2249, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2259, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2268, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2278, + 2279, + 2280, + 2281, + 2282, + 2283, + 2287, + 2292, + 2296, + 2297, + 2298, + 2299, + 2301, + 2302, + 2303, + 2304, + 2305, + 2307, + 2308, + 2313, + 2314, + 2315, + 2316, + 2319, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2527, + 2528, + 2529, + 2543, + 2557, + 2558, + 2559, + 2560, + 2563, + 2564, + 2566, + 2567, + 2568, + 2569, + 2570, + 2571, + 2572, + 2574, + 2576, + 2577, + 2578, + 2581, + 2582, + 2591, + 2592, + 2593, + 2595, + 2596, + 2598, + 2602, + 2603, + 2604, + 2605, + 2606, + 2608, + 2611, + 2612, + 2614, + 2615, + 2616, + 2617, + 2618, + 2619, + 2620, + 2621, + 2622, + 2623, + 2624, + 2625, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2633, + 2634, + 2635, + 2637, + 2639, + 2640, + 2641, + 2642, + 2643, + 2644, + 2645, + 2646, + 2647, + 2649, + 2650, + 2651, + 2652, + 2654, + 2655, + 2657, + 2658, + 2659, + 2661, + 2662, + 2663, + 2665, + 2670, + 2671, + 2674, + 2675, + 2678, + 2679, + 2680, + 2711, + 2712, + 2715, + 2717, + 2718, + 2719, + 2720, + 2724, + 2725, + 2726, + 2727, + 2728, + 2729, + 2733, + 2734, + 2735, + 2736, + 2737, + 2738, + 2741, + 2742, + 2743, + 2744, + 2745, + 2746, + 2747, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2771, + 2772, + 2774, + 2775, + 2777, + 2778, + 2779, + 2780, + 2781, + 2782, + 2783, + 2785, + 2786, + 2787, + 2788, + 2790, + 2791, + 2792, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2859, + 2865, + 2866, + 2869, + 2871, + 2872, + 2873, + 2874, + 2875, + 2877, + 2879, + 2880, + 2882, + 2883, + 2885, + 2891, + 2892, + 2893, + 2894, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2906, + 2907, + 2908, + 2909, + 2911, + 2912, + 2913, + 2914, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2924, + 2926, + 2928, + 2930, + 2931, + 2932, + 2942, + 2943, + 2944, + 2945, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2954, + 2955, + 2956, + 2957, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2966, + 2967, + 2968, + 2970, + 2971, + 2973, + 2974, + 2976, + 2977, + 2979, + 2982, + 2995, + 2996, + 2997, + 2999, + 3000, + 3001, + 3002, + 3004, + 3005, + 3006, + 3011, + 3012, + 3013, + 3014, + 3016, + 3017, + 3026, + 3027, + 3028, + 3031, + 3034, + 3035, + 3037, + 3038, + 3039, + 3040, + 3041, + 3042, + 3043, + 3044, + 3046, + 3047, + 3048, + 3049, + 3050, + 3052, + 3053, + 3054, + 3055, + 3056, + 3057, + 3058, + 3060, + 3064, + 3065, + 3066, + 3067, + 3068, + 3069, + 3070, + 3071, + 3073, + 3074, + 3075, + 3076, + 3077, + 3078, + 3082, + 3083, + 3084, + 3085, + 3086, + 3087, + 3088, + 3089, + 3091, + 3092, + 3093, + 3094, + 3095, + 3096, + 3097, + 3101, + 3102, + 3103, + 3104, + 3105, + 3106, + 3107, + 3108, + 3110, + 3111, + 3112, + 3113, + 3114, + 3115, + 3116, + 3122, + 3125, + 3138, + 3139, + 3140, + 3141, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3151, + 3152, + 3153, + 3156, + 3157, + 3158, + 3159, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3167, + 3168, + 3169, + 3170, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3184, + 3185, + 3186, + 3187, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3199, + 3200, + 3201, + 3202, + 3204, + 3205, + 3207, + 3208, + 3209, + 3210, + 3212, + 3213, + 3215, + 3216, + 3218, + 3219 + ], + "stdout": "............................................................FFFFF....... [ 83%]\n.............. [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.9808682\nE Max relative difference among violations: 0.99077596\nE ACTUAL: array(0.009132)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98896167\nE Max relative difference among violations: 0.99895118\nE ACTUAL: array(0.001038)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.96826032\nE Max relative difference among violations: 0.97804072\nE ACTUAL: array(0.02174)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98707493\nE Max relative difference among violations: 0.99704539\nE ACTUAL: array(0.002925)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:137: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(polygon_mass, claimed, atol=0.006, rtol=0,\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98753075\nE Max relative difference among violations: 0.99750581\nE ACTUAL: array(0.002469)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-h9rm_y6h\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 passed in 47.35s\n", + "stderr": "" + } + } + ], + "executed_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7fd6d4164a9bd50a52e3a47e79eef197c7963dcc6cd5e96be4231383e7ca3a25", + "tests/proofs_dimred_visualizer.py": "01f8be0866d4485a4ed31c89c8fac53ecf990c7de337b5350c84ede688274ed6", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3" + } +} diff --git a/audit/m28_review_hist_disclosure_results.json b/audit/m28_review_hist_disclosure_results.json new file mode 100644 index 0000000..d0694e4 --- /dev/null +++ b/audit/m28_review_hist_disclosure_results.json @@ -0,0 +1,492 @@ +{ + "active_head": "0c06cfd497579c5f99fd957c97ca28a052494bd4", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "working_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/proofs_dimred_visualizer.py": "6fd1f1ed7d1cc5202f8835b3e32ab838d5c9df05754e11d524af05c744f1fbd3", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3" + }, + "runs": [ + { + "name": "AD_HIST", + "selection": "linear_histogram_truncation", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2834, + 2835, + 2836 + ] + ], + "patch": "--- \n+++ \n@@ -2831,6 +2831,9 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls}: excluded {missing} of {len(vals)} outside support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n", + "candidate_sha256": "dd837b5041209b36dbb2ea5dbd14f3fa8c002cde560a5fe1472b6db67f1b5578", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-qs7t4978\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n1 failed, 85 deselected in 1.68s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2846, + 2847, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2858, + 2859, + 2860, + 2862, + 2863, + 2864, + 2866, + 2872, + 2873, + 2986, + 2989 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-qs7t4978\\result.xml -\n1 passed, 85 deselected in 1.31s\n", + "stderr": "" + } + } + ], + "executed_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/proofs_dimred_visualizer.py": "6fd1f1ed7d1cc5202f8835b3e32ab838d5c9df05754e11d524af05c744f1fbd3", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3" + } +} diff --git a/audit/m28_review_kde_initial_results.json b/audit/m28_review_kde_initial_results.json new file mode 100644 index 0000000..c84715c --- /dev/null +++ b/audit/m28_review_kde_initial_results.json @@ -0,0 +1,4279 @@ +{ + "active_head": "4364c61f56d91f7ec93c5c6072b9f88c46023241", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "working_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7fd6d4164a9bd50a52e3a47e79eef197c7963dcc6cd5e96be4231383e7ca3a25", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3" + }, + "runs": [ + { + "name": "C13", + "selection": "kde_labeled_regions", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ] + ], + "patch": "--- \n+++ \n@@ -2430,24 +2430,15 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "6d84e14460c932c392f2cf2c66ce3ace77c7dbb5e30d9900a267d0e01875e68c", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-7jt5rurw\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 15.86s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-7jt5rurw\\result.xml -\n5 passed, 81 deselected in 21.63s\n", + "stderr": "" + } + }, + { + "name": "K4", + "selection": "kde_labeled_regions", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2433, + 2434, + 2435 + ] + ], + "patch": "--- \n+++ \n@@ -2430,24 +2430,9 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ draws = kde.resample(200000, seed=np.random.default_rng(7))\n+ density = kde.evaluate(draws)\n+ levels = sorted(float(np.quantile(density,1-p)) for p in [.99,.95,.68])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "d2cc32567c0419265159ae1ab7ed09fa441dbb6910ec1ba642064acd237b0ada", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-7jt5rurw\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 16.07s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2442, + 2443, + 2444, + 2445, + 2448, + 2449, + 2450, + 2452, + 2453, + 2454, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2469, + 2470, + 2472, + 2473, + 2475, + 2476, + 2478, + 2480, + 2481, + 2482, + 2483, + 2484, + 2485, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2493, + 2494, + 2495, + 2496, + 2497, + 2498, + 2499, + 2501, + 2502, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2512, + 2518, + 2657, + 2662, + 2663, + 2786, + 2790, + 2848, + 2854, + 2855, + 2968, + 2971 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-7jt5rurw\\result.xml -\n5 passed, 81 deselected in 23.66s\n", + "stderr": "" + } + }, + { + "name": "K5", + "selection": "kde_labeled_regions", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440 + ] + ], + "patch": "--- \n+++ \n@@ -2430,24 +2430,14 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ sigma = np.sqrt(np.diag(kde.covariance))\n+ qx = np.linspace(kde.dataset[0].min()-4*sigma[0],kde.dataset[0].max()+4*sigma[0],500)\n+ qy = np.linspace(kde.dataset[1].min()-4*sigma[1],kde.dataset[1].max()+4*sigma[1],500)\n+ a,b = np.meshgrid(qx,qy)\n+ density = kde(np.vstack([a.ravel(),b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "a9abd3173f5b345587fcd6078f88399a56f5db3e81b79124ab932bb4360800f6", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-7jt5rurw\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 16.14s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2442, + 2443, + 2444, + 2445, + 2447, + 2448, + 2449, + 2450, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2461, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2474, + 2475, + 2477, + 2478, + 2480, + 2481, + 2483, + 2485, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2506, + 2507, + 2509, + 2510, + 2511, + 2513, + 2514, + 2515, + 2517, + 2523, + 2662, + 2667, + 2668, + 2791, + 2795, + 2853, + 2859, + 2860, + 2973, + 2976 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-7jt5rurw\\result.xml -\n5 passed, 81 deselected in 25.54s\n", + "stderr": "" + } + }, + { + "name": "K1B", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2433, + 2434 + ] + ], + "patch": "--- \n+++ \n@@ -2430,24 +2430,8 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ peak=float(ZZ.max())\n+ levels=sorted((1-p)*peak for p in [.99,.95,.68])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "127741378c98c29474550f756b7aeff962f408e65becfab57162b1968a9e176b", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-7jt5rurw\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 15.94s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01325009\nE Max relative difference among violations: 0.01948543\nE ACTUAL: array(0.66675)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.06517162\nE Max relative difference among violations: 0.09584061\nE ACTUAL: array(0.614828)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 95% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00760257\nE Max relative difference among violations: 0.00800271\nE ACTUAL: array(0.957603)\nE DESIRED: array(0.95)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.07964528\nE Max relative difference among violations: 0.11712541\nE ACTUAL: array(0.600355)\nE DESIRED: array(0.68)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2436, + 2437, + 2438, + 2439, + 2441, + 2442, + 2443, + 2444, + 2447, + 2448, + 2449, + 2451, + 2452, + 2453, + 2455, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2466, + 2468, + 2469, + 2471, + 2472, + 2474, + 2475, + 2477, + 2479, + 2480, + 2481, + 2482, + 2483, + 2484, + 2485, + 2486, + 2487, + 2488, + 2489, + 2490, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2498, + 2500, + 2501, + 2503, + 2504, + 2505, + 2507, + 2508, + 2509, + 2511, + 2517, + 2656, + 2661, + 2662, + 2785, + 2789, + 2847, + 2853, + 2854, + 2967, + 2970 + ], + "stdout": "F.FFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01325009\nE Max relative difference among violations: 0.01948543\nE ACTUAL: array(0.66675)\nE DESIRED: array(0.68)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.06517162\nE Max relative difference among violations: 0.09584061\nE ACTUAL: array(0.614828)\nE DESIRED: array(0.68)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 95% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00760257\nE Max relative difference among violations: 0.00800271\nE ACTUAL: array(0.957603)\nE DESIRED: array(0.95)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.07964528\nE Max relative difference among violations: 0.11712541\nE ACTUAL: array(0.600355)\nE DESIRED: array(0.68)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-7jt5rurw\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n4 failed, 1 passed, 81 deselected in 16.52s\n", + "stderr": "" + } + }, + { + "name": "K6", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2475 + ] + ], + "patch": "--- \n+++ \n@@ -2430,24 +2430,15 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2485,7 +2476,7 @@\n cs,\n # Labels textuels 99/95/68% align\u00e9s aux niveaux calcul\u00e9s.\n fmt={\n- lv: nm for lv, nm in zip(levels, [\"99%\", \"95%\", \"68%\"][-n_lv:])\n+ lv: nm for lv, nm in zip(levels, [\"68%\", \"95%\", \"99%\"][-n_lv:])\n },\n fontsize=7,\n inline=True,\n", + "candidate_sha256": "31bb333104f8a1e5cdaf37c3f0ef573de4a9bfc6985d469390a357b3eb34921e", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-7jt5rurw\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 16.40s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3100187\nE Max relative difference among violations: 0.45590985\nE ACTUAL: array(0.990019)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997108\nE Max relative difference among violations: 0.45583983\nE ACTUAL: array(0.989971)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997656\nE Max relative difference among violations: 0.45584788\nE ACTUAL: array(0.989977)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31000088\nE Max relative difference among violations: 0.45588364\nE ACTUAL: array(0.990001)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31002934\nE Max relative difference among violations: 0.4559255\nE ACTUAL: array(0.990029)\nE DESIRED: array(0.68)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3100187\nE Max relative difference among violations: 0.45590985\nE ACTUAL: array(0.990019)\nE DESIRED: array(0.68)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997108\nE Max relative difference among violations: 0.45583983\nE ACTUAL: array(0.989971)\nE DESIRED: array(0.68)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997656\nE Max relative difference among violations: 0.45584788\nE ACTUAL: array(0.989977)\nE DESIRED: array(0.68)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31000088\nE Max relative difference among violations: 0.45588364\nE ACTUAL: array(0.990001)\nE DESIRED: array(0.68)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31002934\nE Max relative difference among violations: 0.4559255\nE ACTUAL: array(0.990029)\nE DESIRED: array(0.68)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-7jt5rurw\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 22.39s\n", + "stderr": "" + } + }, + { + "name": "K7", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2424 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ] + ], + "patch": "--- \n+++ \n@@ -2421,7 +2421,7 @@\n # Sous-\u00e9chantillon pour stabiliser le co\u00fbt de la KDE.\n idx = rng.choice(len(Z_stars), N_KDE, replace=False)\n logger.info(\"Calcul KDE sur %d \u00e9toiles...\", N_KDE)\n- kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n+ kde = gaussian_kde(Z_ae.T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n margin = (p99 - p1) * 0.15\n@@ -2430,24 +2430,15 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "de191cd7aaac6274b9040bc4f2cf38aed0b44c07d016d6556fec924e401efabe", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-7jt5rurw\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 16.71s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:102: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000001E6465D1540>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:102: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000001E6462A67A0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:102: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000001E5CEEB2CE0>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "..FFF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:102: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000001E6465D1540>)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:102: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000001E6462A67A0>)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:102: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000001E5CEEB2CE0>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-7jt5rurw\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n3 failed, 2 passed, 81 deselected in 13.15s\n", + "stderr": "" + } + }, + { + "name": "K8", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2465 + ] + ], + "patch": "--- \n+++ \n@@ -2430,24 +2430,15 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2474,7 +2465,7 @@\n cs = ax.contour(\n XX,\n YY,\n- ZZ,\n+ ZZ.T,\n levels=levels,\n colors=[\"#4A4A4A\", \"#2A2A2A\", \"#0A0A0A\"][-n_lv:],\n linewidths=[0.8, 1.2, 1.8][-n_lv:],\n", + "candidate_sha256": "cc0fa8d5a05051f39310a461d58ca3819c787f86d715eade291365f4b7bb04c3", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-7jt5rurw\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 16.46s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:130: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0.05, atol=1e-10\nE Contour vertices are not on the fitted STAR iso-density\nE Mismatched elements: 474 / 485 (97.7%)\nE First 5 mismatches are at indices:\nE [0]: 0.0009555617959911597 (ACTUAL), 0.0003739790892435298 (DESIRED)\nE [1]: 0.0009659113988760274 (ACTUAL), 0.0003739790892435298 (DESIRED)\nE [2]: 0.0009843495313486624 (ACTUAL), 0.0003739790892435298 (DESIRED)\nE [3]: 0.000989918612975631 (ACTUAL), 0.0003739790892435298 (DESIRED)\nE [4]: 0.0010059522009393707 (ACTUAL), 0.0003739790892435298 (DESIRED)\nE Max absolute difference among violations: 0.00205778\nE Max relative difference among violations: 5.50239621\nE ACTUAL: array([9.555618e-04, 9.659114e-04, 9.843495e-04, 9.899186e-04,\nE 1.005952e-03, 1.017213e-03, 1.020526e-03, 1.024080e-03,\nE 1.027396e-03, 1.027690e-03, 1.025129e-03, 1.019831e-03,...\nE DESIRED: array(0.000374)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:130: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0.05, atol=1e-10\nE Contour vertices are not on the fitted STAR iso-density\nE Mismatched elements: 290 / 323 (89.8%)\nE First 5 mismatches are at indices:\nE [0]: 0.00012053718918840518 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [1]: 0.00012069675278331661 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [2]: 0.00012171470493442787 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [3]: 0.00012245368736272662 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [4]: 0.00012372535176681336 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE Max absolute difference among violations: 0.00038732\nE Max relative difference among violations: 1.45842126\nE ACTUAL: array([0.000121, 0.000121, 0.000122, 0.000122, 0.000124, 0.000124,\nE 0.000126, 0.000126, 0.000128, 0.000128, 0.00013 , 0.00013 ,\nE 0.000132, 0.000132, 0.000134, 0.000134, 0.000136, 0.000137,...\nE DESIRED: array(0.000266)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:130: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0.05, atol=1e-10\nE Contour vertices are not on the fitted STAR iso-density\nE Mismatched elements: 424 / 428 (99.1%)\nE First 5 mismatches are at indices:\nE [0]: 2.0127437277669334e-08 (ACTUAL), 0.0004910334396794147 (DESIRED)\nE [1]: 1.8148700734576733e-08 (ACTUAL), 0.0004910334396794147 (DESIRED)\nE [2]: 1.3873621200772217e-08 (ACTUAL), 0.0004910334396794147 (DESIRED)\nE [3]: 1.157840657454168e-08 (ACTUAL), 0.0004910334396794147 (DESIRED)\nE [4]: 1.0604229178514437e-08 (ACTUAL), 0.0004910334396794147 (DESIRED)\nE Max absolute difference among violations: 0.03349921\nE Max relative difference among violations: 68.22184853\nE ACTUAL: array([2.012744e-08, 1.814870e-08, 1.387362e-08, 1.157841e-08,\nE 1.060423e-08, 8.069373e-09, 6.735528e-09, 6.140490e-09,\nE 4.653020e-09, 3.954553e-09, 3.523473e-09, 2.659881e-09,...\nE DESIRED: array(0.000491)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:130: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0.05, atol=1e-10\nE Contour vertices are not on the fitted STAR iso-density\nE Mismatched elements: 408 / 420 (97.1%)\nE First 5 mismatches are at indices:\nE [0]: 7.257935203492902e-12 (ACTUAL), 0.0005556439354103947 (DESIRED)\nE [1]: 7.181309421504672e-12 (ACTUAL), 0.0005556439354103947 (DESIRED)\nE [2]: 7.1182930162706415e-12 (ACTUAL), 0.0005556439354103947 (DESIRED)\nE [3]: 9.074177987899167e-13 (ACTUAL), 0.0005556439354103947 (DESIRED)\nE [4]: 8.993135351017333e-13 (ACTUAL), 0.0005556439354103947 (DESIRED)\nE Max absolute difference among violations: 0.03753298\nE Max relative difference among violations: 67.5486114\nE ACTUAL: array([7.257935e-12, 7.181309e-12, 7.118293e-12, 9.074178e-13,\nE 8.993135e-13, 6.255528e-13, 4.358160e-13, 3.938273e-13,\nE 3.019876e-13, 2.093321e-13, 1.488415e-13, 1.456941e-13,...\nE DESIRED: array(0.000556)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:130: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0.05, atol=1e-10\nE Contour vertices are not on the fitted STAR iso-density\nE Mismatched elements: 465 / 473 (98.3%)\nE First 5 mismatches are at indices:\nE [0]: 7.201567616860566e-13 (ACTUAL), 0.0005102283653065101 (DESIRED)\nE [1]: 6.834404277920794e-13 (ACTUAL), 0.0005102283653065101 (DESIRED)\nE [2]: 4.791019705592756e-13 (ACTUAL), 0.0005102283653065101 (DESIRED)\nE [3]: 3.906834565883421e-13 (ACTUAL), 0.0005102283653065101 (DESIRED)\nE [4]: 3.375504957519698e-13 (ACTUAL), 0.0005102283653065101 (DESIRED)\nE Max absolute difference among violations: 0.03814105\nE Max relative difference among violations: 74.7529076\nE ACTUAL: array([7.201568e-13, 6.834404e-13, 4.791020e-13, 3.906835e-13,\nE 3.375505e-13, 2.384092e-13, 2.212883e-13, 1.682771e-13,\nE 1.297165e-13, 1.194438e-13, 8.480070e-14, 7.830118e-14,...\nE DESIRED: array(0.00051)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:130: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0.05, atol=1e-10\nE Contour vertices are not on the fitted STAR iso-density\nE Mismatched elements: 474 / 485 (97.7%)\nE First 5 mismatches are at indices:\nE [0]: 0.0009555617959911597 (ACTUAL), 0.0003739790892435298 (DESIRED)\nE [1]: 0.0009659113988760274 (ACTUAL), 0.0003739790892435298 (DESIRED)\nE [2]: 0.0009843495313486624 (ACTUAL), 0.0003739790892435298 (DESIRED)\nE [3]: 0.000989918612975631 (ACTUAL), 0.0003739790892435298 (DESIRED)\nE [4]: 0.0010059522009393707 (ACTUAL), 0.0003739790892435298 (DESIRED)\nE Max absolute difference among violations: 0.00205778\nE Max relative difference among violations: 5.50239621\nE ACTUAL: array([9.555618e-04, 9.659114e-04, 9.843495e-04, 9.899186e-04,\nE 1.005952e-03, 1.017213e-03, 1.020526e-03, 1.024080e-03,\nE 1.027396e-03, 1.027690e-03, 1.025129e-03, 1.019831e-03,...\nE DESIRED: array(0.000374)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:130: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0.05, atol=1e-10\nE Contour vertices are not on the fitted STAR iso-density\nE Mismatched elements: 290 / 323 (89.8%)\nE First 5 mismatches are at indices:\nE [0]: 0.00012053718918840518 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [1]: 0.00012069675278331661 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [2]: 0.00012171470493442787 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [3]: 0.00012245368736272662 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [4]: 0.00012372535176681336 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE Max absolute difference among violations: 0.00038732\nE Max relative difference among violations: 1.45842126\nE ACTUAL: array([0.000121, 0.000121, 0.000122, 0.000122, 0.000124, 0.000124,\nE 0.000126, 0.000126, 0.000128, 0.000128, 0.00013 , 0.00013 ,\nE 0.000132, 0.000132, 0.000134, 0.000134, 0.000136, 0.000137,...\nE DESIRED: array(0.000266)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:130: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0.05, atol=1e-10\nE Contour vertices are not on the fitted STAR iso-density\nE Mismatched elements: 424 / 428 (99.1%)\nE First 5 mismatches are at indices:\nE [0]: 2.0127437277669334e-08 (ACTUAL), 0.0004910334396794147 (DESIRED)\nE [1]: 1.8148700734576733e-08 (ACTUAL), 0.0004910334396794147 (DESIRED)\nE [2]: 1.3873621200772217e-08 (ACTUAL), 0.0004910334396794147 (DESIRED)\nE [3]: 1.157840657454168e-08 (ACTUAL), 0.0004910334396794147 (DESIRED)\nE [4]: 1.0604229178514437e-08 (ACTUAL), 0.0004910334396794147 (DESIRED)\nE Max absolute difference among violations: 0.03349921\nE Max relative difference among violations: 68.22184853\nE ACTUAL: array([2.012744e-08, 1.814870e-08, 1.387362e-08, 1.157841e-08,\nE 1.060423e-08, 8.069373e-09, 6.735528e-09, 6.140490e-09,\nE 4.653020e-09, 3.954553e-09, 3.523473e-09, 2.659881e-09,...\nE DESIRED: array(0.000491)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:130: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0.05, atol=1e-10\nE Contour vertices are not on the fitted STAR iso-density\nE Mismatched elements: 408 / 420 (97.1%)\nE First 5 mismatches are at indices:\nE [0]: 7.257935203492902e-12 (ACTUAL), 0.0005556439354103947 (DESIRED)\nE [1]: 7.181309421504672e-12 (ACTUAL), 0.0005556439354103947 (DESIRED)\nE [2]: 7.1182930162706415e-12 (ACTUAL), 0.0005556439354103947 (DESIRED)\nE [3]: 9.074177987899167e-13 (ACTUAL), 0.0005556439354103947 (DESIRED)\nE [4]: 8.993135351017333e-13 (ACTUAL), 0.0005556439354103947 (DESIRED)\nE Max absolute difference among violations: 0.03753298\nE Max relative difference among violations: 67.5486114\nE ACTUAL: array([7.257935e-12, 7.181309e-12, 7.118293e-12, 9.074178e-13,\nE 8.993135e-13, 6.255528e-13, 4.358160e-13, 3.938273e-13,\nE 3.019876e-13, 2.093321e-13, 1.488415e-13, 1.456941e-13,...\nE DESIRED: array(0.000556)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:130: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0.05, atol=1e-10\nE Contour vertices are not on the fitted STAR iso-density\nE Mismatched elements: 465 / 473 (98.3%)\nE First 5 mismatches are at indices:\nE [0]: 7.201567616860566e-13 (ACTUAL), 0.0005102283653065101 (DESIRED)\nE [1]: 6.834404277920794e-13 (ACTUAL), 0.0005102283653065101 (DESIRED)\nE [2]: 4.791019705592756e-13 (ACTUAL), 0.0005102283653065101 (DESIRED)\nE [3]: 3.906834565883421e-13 (ACTUAL), 0.0005102283653065101 (DESIRED)\nE [4]: 3.375504957519698e-13 (ACTUAL), 0.0005102283653065101 (DESIRED)\nE Max absolute difference among violations: 0.03814105\nE Max relative difference among violations: 74.7529076\nE ACTUAL: array([7.201568e-13, 6.834404e-13, 4.791020e-13, 3.906835e-13,\nE 3.375505e-13, 2.384092e-13, 2.212883e-13, 1.682771e-13,\nE 1.297165e-13, 1.194438e-13, 8.480070e-14, 7.830118e-14,...\nE DESIRED: array(0.00051)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-7jt5rurw\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 22.44s\n", + "stderr": "" + } + } + ], + "executed_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7fd6d4164a9bd50a52e3a47e79eef197c7963dcc6cd5e96be4231383e7ca3a25", + "tests/proofs_dimred_visualizer.py": "2977b9033b086f26b611f8e3e3d1f8357fd8846142ad39c1be7d0b512bff9e4e", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3" + } +} diff --git a/audit/m28_review_kde_results.json b/audit/m28_review_kde_results.json new file mode 100644 index 0000000..43592bb --- /dev/null +++ b/audit/m28_review_kde_results.json @@ -0,0 +1,10060 @@ +{ + "active_head": "0c06cfd497579c5f99fd957c97ca28a052494bd4", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "working_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/proofs_dimred_visualizer.py": "6fd1f1ed7d1cc5202f8835b3e32ab838d5c9df05754e11d524af05c744f1fbd3", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3" + }, + "runs": [ + { + "name": "C13", + "selection": "kde_labeled_regions", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "29d8c4c1e860508b96cdce82bf78feba2c48b5f74fb65984d9736dc44c8ddfee", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-4nukdt1w\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 16.44s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-4nukdt1w\\result.xml -\n5 passed, 81 deselected in 24.99s\n", + "stderr": "" + } + }, + { + "name": "K4", + "selection": "kde_labeled_regions", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,15 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ draws = kde.resample(200000, seed=np.random.default_rng(7))\n+ density = kde.evaluate(draws)\n+ levels = sorted(float(np.quantile(density,1-p)) for p in [.99,.95,.68])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "f5353c35e24c3908f14540eb69100b0026502a508ea8e34823764b12bca1ecb7", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-4nukdt1w\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 16.68s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2442, + 2443, + 2444, + 2445, + 2448, + 2449, + 2450, + 2452, + 2453, + 2454, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2469, + 2470, + 2472, + 2473, + 2475, + 2476, + 2478, + 2480, + 2481, + 2482, + 2483, + 2484, + 2485, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2493, + 2494, + 2495, + 2496, + 2497, + 2498, + 2499, + 2501, + 2502, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2512, + 2518, + 2657, + 2662, + 2663, + 2786, + 2790, + 2848, + 2854, + 2855, + 2968, + 2971 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-4nukdt1w\\result.xml -\n5 passed, 81 deselected in 28.60s\n", + "stderr": "" + } + }, + { + "name": "K5", + "selection": "kde_labeled_regions", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,20 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ sigma = np.sqrt(np.diag(kde.covariance))\n+ qx = np.linspace(kde.dataset[0].min()-4*sigma[0],kde.dataset[0].max()+4*sigma[0],500)\n+ qy = np.linspace(kde.dataset[1].min()-4*sigma[1],kde.dataset[1].max()+4*sigma[1],500)\n+ a,b = np.meshgrid(qx,qy)\n+ density = kde(np.vstack([a.ravel(),b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "ae151ba113c3b6bbaf69e6bc068592e34087bd1c03b58c4f5ea8281b75c44d42", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-4nukdt1w\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 16.90s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2442, + 2443, + 2444, + 2445, + 2447, + 2448, + 2449, + 2450, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2461, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2474, + 2475, + 2477, + 2478, + 2480, + 2481, + 2483, + 2485, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2506, + 2507, + 2509, + 2510, + 2511, + 2513, + 2514, + 2515, + 2517, + 2523, + 2662, + 2667, + 2668, + 2791, + 2795, + 2853, + 2859, + 2860, + 2973, + 2976 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-4nukdt1w\\result.xml -\n5 passed, 81 deselected in 28.79s\n", + "stderr": "" + } + }, + { + "name": "K1B", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,14 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ peak=float(ZZ.max())\n+ levels=sorted((1-p)*peak for p in [.99,.95,.68])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "c7440409300cf121262065ba00ef3d8ec697b80fd48d35bae00e9d1e10bccafe", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-4nukdt1w\\result.xml -\n5 passed, 81 deselected in 24.85s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01325009\nE Max relative difference among violations: 0.01948543\nE ACTUAL: array(0.66675)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.06514077\nE Max relative difference among violations: 0.09579524\nE ACTUAL: array(0.614859)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 95% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00763319\nE Max relative difference among violations: 0.00803493\nE ACTUAL: array(0.957633)\nE DESIRED: array(0.95)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.07977581\nE Max relative difference among violations: 0.11731737\nE ACTUAL: array(0.600224)\nE DESIRED: array(0.68)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2436, + 2437, + 2438, + 2439, + 2441, + 2442, + 2443, + 2444, + 2447, + 2448, + 2449, + 2451, + 2452, + 2453, + 2455, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2466, + 2468, + 2469, + 2471, + 2472, + 2474, + 2475, + 2477, + 2479, + 2480, + 2481, + 2482, + 2483, + 2484, + 2485, + 2486, + 2487, + 2488, + 2489, + 2490, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2498, + 2500, + 2501, + 2503, + 2504, + 2505, + 2507, + 2508, + 2509, + 2511, + 2517, + 2656, + 2661, + 2662, + 2785, + 2789, + 2847, + 2853, + 2854, + 2967, + 2970 + ], + "stdout": "F.FFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01325009\nE Max relative difference among violations: 0.01948543\nE ACTUAL: array(0.66675)\nE DESIRED: array(0.68)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.06514077\nE Max relative difference among violations: 0.09579524\nE ACTUAL: array(0.614859)\nE DESIRED: array(0.68)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 95% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00763319\nE Max relative difference among violations: 0.00803493\nE ACTUAL: array(0.957633)\nE DESIRED: array(0.95)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.07977581\nE Max relative difference among violations: 0.11731737\nE ACTUAL: array(0.600224)\nE DESIRED: array(0.68)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-4nukdt1w\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n4 failed, 1 passed, 81 deselected in 17.61s\n", + "stderr": "" + } + }, + { + "name": "K6", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2475 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2485,7 +2476,7 @@\n cs,\n # Labels textuels 99/95/68% align\u00e9s aux niveaux calcul\u00e9s.\n fmt={\n- lv: nm for lv, nm in zip(levels, [\"99%\", \"95%\", \"68%\"][-n_lv:])\n+ lv: nm for lv, nm in zip(levels, [\"68%\", \"95%\", \"99%\"][-n_lv:])\n },\n fontsize=7,\n inline=True,\n", + "candidate_sha256": "0473bb1fd282d2ae32f067cc1cd2885486cf75b9cfc70ccd7fae3dd9aacc0ebf", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-4nukdt1w\\result.xml -\n5 passed, 81 deselected in 25.31s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3100187\nE Max relative difference among violations: 0.45590985\nE ACTUAL: array(0.990019)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997108\nE Max relative difference among violations: 0.45583983\nE ACTUAL: array(0.989971)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997656\nE Max relative difference among violations: 0.45584788\nE ACTUAL: array(0.989977)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31000088\nE Max relative difference among violations: 0.45588364\nE ACTUAL: array(0.990001)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31002934\nE Max relative difference among violations: 0.4559255\nE ACTUAL: array(0.990029)\nE DESIRED: array(0.68)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3100187\nE Max relative difference among violations: 0.45590985\nE ACTUAL: array(0.990019)\nE DESIRED: array(0.68)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997108\nE Max relative difference among violations: 0.45583983\nE ACTUAL: array(0.989971)\nE DESIRED: array(0.68)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997656\nE Max relative difference among violations: 0.45584788\nE ACTUAL: array(0.989977)\nE DESIRED: array(0.68)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31000088\nE Max relative difference among violations: 0.45588364\nE ACTUAL: array(0.990001)\nE DESIRED: array(0.68)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31002934\nE Max relative difference among violations: 0.4559255\nE ACTUAL: array(0.990029)\nE DESIRED: array(0.68)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-4nukdt1w\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 22.67s\n", + "stderr": "" + } + }, + { + "name": "K7", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2424 + ], + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ] + ], + "patch": "--- \n+++ \n@@ -2421,33 +2421,24 @@\n # Sous-\u00e9chantillon pour stabiliser le co\u00fbt de la KDE.\n idx = rng.choice(len(Z_stars), N_KDE, replace=False)\n logger.info(\"Calcul KDE sur %d \u00e9toiles...\", N_KDE)\n- kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n+ kde = gaussian_kde(Z_ae.T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "5c14d1ded1f2fe64555f2b2c4a9b034c375610f1fbbad8333c1474264a5a096e", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-4nukdt1w\\result.xml -\n5 passed, 81 deselected in 25.23s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000001E22D4826C0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000001E22D71C820>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000001E22D8F3920>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "..FFF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000001E22D4826C0>)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000001E22D71C820>)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000001E22D8F3920>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-4nukdt1w\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n3 failed, 2 passed, 81 deselected in 14.10s\n", + "stderr": "" + } + }, + { + "name": "K8", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2465 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2474,7 +2465,7 @@\n cs = ax.contour(\n XX,\n YY,\n- ZZ,\n+ ZZ.T,\n levels=levels,\n colors=[\"#4A4A4A\", \"#2A2A2A\", \"#0A0A0A\"][-n_lv:],\n linewidths=[0.8, 1.2, 1.8][-n_lv:],\n", + "candidate_sha256": "c833f6f75c4e376a04cc2eea5031910643373a69836d06cd20e56e18f97f664b", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-4nukdt1w\\result.xml -\n5 passed, 81 deselected in 25.25s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01294495\nE Max relative difference among violations: 0.0130757\nE ACTUAL: array(0.977055)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:147: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0.05, atol=1e-10\nE Contour vertices are not on the fitted STAR iso-density\nE Mismatched elements: 425 / 457 (93%)\nE First 5 mismatches are at indices:\nE [0]: 8.749356970086692e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [1]: 8.648096934890717e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [2]: 8.559249232877267e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [3]: 8.481673619124976e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [4]: 8.414570496859691e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE Max absolute difference among violations: 0.00044197\nE Max relative difference among violations: 1.66420284\nE ACTUAL: array([8.749357e-05, 8.648097e-05, 8.559249e-05, 8.481674e-05,\nE 8.414570e-05, 8.357454e-05, 8.310137e-05, 8.272715e-05,\nE 8.245573e-05, 8.229383e-05, 8.229396e-05, 8.204398e-05,...\nE DESIRED: array(0.000266)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.22685682\nE Max relative difference among violations: 0.2291483\nE ACTUAL: array(0.763143)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3138107\nE Max relative difference among violations: 0.31698051\nE ACTUAL: array(0.676189)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.27101919\nE Max relative difference among violations: 0.27375676\nE ACTUAL: array(0.718981)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01294495\nE Max relative difference among violations: 0.0130757\nE ACTUAL: array(0.977055)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:147: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0.05, atol=1e-10\nE Contour vertices are not on the fitted STAR iso-density\nE Mismatched elements: 425 / 457 (93%)\nE First 5 mismatches are at indices:\nE [0]: 8.749356970086692e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [1]: 8.648096934890717e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [2]: 8.559249232877267e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [3]: 8.481673619124976e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [4]: 8.414570496859691e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE Max absolute difference among violations: 0.00044197\nE Max relative difference among violations: 1.66420284\nE ACTUAL: array([8.749357e-05, 8.648097e-05, 8.559249e-05, 8.481674e-05,\nE 8.414570e-05, 8.357454e-05, 8.310137e-05, 8.272715e-05,\nE 8.245573e-05, 8.229383e-05, 8.229396e-05, 8.204398e-05,...\nE DESIRED: array(0.000266)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.22685682\nE Max relative difference among violations: 0.2291483\nE ACTUAL: array(0.763143)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3138107\nE Max relative difference among violations: 0.31698051\nE ACTUAL: array(0.676189)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.27101919\nE Max relative difference among violations: 0.27375676\nE ACTUAL: array(0.718981)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-4nukdt1w\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 23.26s\n", + "stderr": "" + } + }, + { + "name": "K9", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2465 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2474,7 +2465,7 @@\n cs = ax.contour(\n XX,\n YY,\n- ZZ,\n+ np.ma.masked_where(XX > 3, ZZ),\n levels=levels,\n colors=[\"#4A4A4A\", \"#2A2A2A\", \"#0A0A0A\"][-n_lv:],\n linewidths=[0.8, 1.2, 1.8][-n_lv:],\n", + "candidate_sha256": "7371291f3dffc0a862a6f8af606664cd85a80726f6d05444494d29a5f3e3c15a", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-4nukdt1w\\result.xml -\n5 passed, 81 deselected in 25.36s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.05631876\nE Max relative difference among violations: 0.05688764\nE ACTUAL: array(0.933681)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.06331658\nE Max relative difference among violations: 0.06395614\nE ACTUAL: array(0.926683)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.29256688\nE Max relative difference among violations: 0.2955221\nE ACTUAL: array(0.697433)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30004933\nE Max relative difference among violations: 0.30308013\nE ACTUAL: array(0.689951)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30314268\nE Max relative difference among violations: 0.30620472\nE ACTUAL: array(0.686857)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.05631876\nE Max relative difference among violations: 0.05688764\nE ACTUAL: array(0.933681)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.06331658\nE Max relative difference among violations: 0.06395614\nE ACTUAL: array(0.926683)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.29256688\nE Max relative difference among violations: 0.2955221\nE ACTUAL: array(0.697433)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30004933\nE Max relative difference among violations: 0.30308013\nE ACTUAL: array(0.689951)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:139: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30314268\nE Max relative difference among violations: 0.30620472\nE ACTUAL: array(0.686857)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-4nukdt1w\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 23.51s\n", + "stderr": "" + } + }, + { + "name": "JOINT", + "selection": "", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 154 + ], + [ + 185 + ], + [ + 288 + ], + [ + 869 + ], + [ + 1018 + ], + [ + 1087 + ], + [ + 1110 + ], + [ + 1178, + 1179 + ], + [ + 1252 + ], + [ + 1319 + ], + [ + 1414 + ], + [ + 1559 + ], + [ + 2019 + ], + [ + 2040 + ], + [ + 2068 + ], + [ + 2278 + ], + [ + 2320 + ], + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2527, + 2528 + ], + [ + 2816 + ], + [ + 2827, + 2828, + 2829 + ], + [ + 3035 + ], + [ + 3209 + ] + ], + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, 100 * ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"{n_thresh} PCs\\n\u2192 {pca_analyzer.explained_variance_ratio[:n_thresh].sum()*100:.1f}%\",\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n@@ -285,7 +285,7 @@\n df = df.sort_values(\"loading\")\n \n # Couleur encodant le signe physique de la contribution.\n- colors = [\"#DD8452\" if v < 0 else \"#4C72B0\" for v in df[\"loading\"]]\n+ colors = [\"#CC5500\" if v < 0 else \"#0055CC\" for v in df[\"loading\"]]\n fig, ax = plt.subplots(figsize=(8, max(4, n_top * 0.35)), dpi=self.dpi)\n \n ax.barh(\n@@ -869,7 +869,7 @@\n ax.text(\n lam,\n ymax * 0.88,\n- nom,\n+ nom.replace(chr(92)*2, chr(92)),\n rotation=90,\n fontsize=6,\n color=\"crimson\",\n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ fig.canvas.print_figure(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n@@ -1084,9 +1084,7 @@\n \"Autoencodeur \u2014 Historique d'entra\u00eenement (LAMOST DR5)\", fontsize=13, y=1.02\n )\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_training_history\")\n return fig, axes\n \n def plot_ae_embedding(self, Z, meta, y, save_path=None):\n@@ -1109,6 +1107,7 @@\n \n PALETTE = {\"STAR\": \"#4C72B0\", \"GALAXY\": \"#DD8452\", \"QSO\": \"#55A868\"}\n MARKERS = {\"STAR\": \"o\", \"GALAXY\": \"s\", \"QSO\": \"^\"}\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -1176,6 +1175,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in axes[len(idx):]:\n+ unused.set_visible(False)\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n@@ -1248,9 +1249,7 @@\n ax.legend(fontsize=9)\n ax.grid(True, alpha=0.3)\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_ae_vs_pca\")\n return fig, ax\n \n def plot_latent_interpolation(\n@@ -1317,7 +1316,7 @@\n classes = np.unique(y)\n palette = [\"#4C72B0\", \"#DD8452\", \"#55A868\", \"#C44E52\"]\n fig, ax = plt.subplots(figsize=(9, 5), dpi=self.dpi)\n- for cls, color in zip(classes, palette):\n+ for cls, color in zip(classes, palette*((len(classes)+len(palette)-1)//len(palette))):\n mask = y == cls\n vals = mse_per_sample[mask]\n # Histogrammes normalis\u00e9s pour comparer les formes de distribution.\n@@ -1413,7 +1412,7 @@\n ),\n )\n sm = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n@@ -1558,7 +1557,7 @@\n )\n ax.grid(True, alpha=0.2)\n sm2 = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm2.set_array([])\n plt.colorbar(\n@@ -2017,7 +2016,7 @@\n ncols = 4\n nrows = (n_show + ncols - 1) // ncols\n fig, axes = plt.subplots(nrows, ncols, figsize=(5 * ncols, 4 * nrows), dpi=120)\n- axes_flat = axes.flatten() if n_show > 1 else [axes]\n+ axes_flat = np.asarray(axes).ravel()\n \n for ax_i, cid in zip(axes_flat, top_cids):\n profile = cluster_means.loc[cid]\n@@ -2038,7 +2037,7 @@\n ax_i.set_xlabel(\"Score moyen (\u03c3)\", fontsize=8)\n ax_i.grid(axis=\"x\", alpha=0.3)\n ax_i.set_xlim(-3, 3)\n- for ax_i in axes_flat[n_show:]:\n+ for ax_i in axes_flat[len(top_cids):]:\n ax_i.axis(\"off\")\n fig.suptitle(\n \"Top-5 features caract\u00e9ristiques par cluster HDBSCAN\\n\"\n@@ -2066,7 +2065,7 @@\n \n # V\u00e9rifie si une vraie probabilit\u00e9 est disponible.\n classes_pred = sorted(set(y_pred))\n- has_proba = confidence is not None and not np.all(confidence == 1.0)\n+ has_proba = confidence is not None\n fig, axes = plt.subplots(1, 3, figsize=(22, 8), dpi=self.dpi)\n \n ax = axes[0]\n@@ -2276,7 +2275,7 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0, 1.01)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n@@ -2318,6 +2317,7 @@\n ]\n \n fig, axes = plt.subplots(1, 1 + len(available), figsize=(22, 5), dpi=self.dpi)\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2533,6 +2524,8 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ if not (len(X) == len(X_recon) == len(spectral_types)):\n+ raise RuntimeError(\"Observation alignment: incompatible lengths\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n@@ -2821,7 +2814,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(max(vals.min(), np.finfo(float).tiny)), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n@@ -2831,6 +2824,9 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls}: excluded {missing} of {len(vals)} outside support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n@@ -3054,7 +3050,7 @@\n MS_G_HOT + (MS_G_COOL - MS_G_HOT) * 0.35,\n ),\n (T_LO + (T_HI - T_LO) * 0.25, MS_G_COOL - 0.10),\n- (T_LO + T_PAD, G_HI - T_PAD * 2),\n+ (T_LO + T_PAD, G_HI - G_PAD * 2),\n (T_LO + T_PAD, G_HI - G_PAD),\n (T_LO + (T_HI - T_LO) * 0.20, MS_G_COOL + MS_W * 0.6),\n (\n@@ -3212,7 +3208,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 population fournie\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "candidate_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001A06947EEA0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001A06851BCA0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:204: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:238: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000001A068487220>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:250: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:251: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:271: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:270: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:279: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:326: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:343: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]))\nE + where = .exclusion_report" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:364: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1474/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1474/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:196: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:432: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:437: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "............................................................FFFFFFFFFFFF [ 83%]\nFFF.FFFFFFFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001A06947EEA0>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001A06851BCA0>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:204: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:238: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000001A068487220>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:250: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:251: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:271: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:270: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:279: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:326: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:343: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]))\nE + where = .exclusion_report\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:364: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1474/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1474/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:196: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:432: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:437: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-4nukdt1w\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n25 failed, 61 passed in 37.21s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1090, + 1092, + 1095, + 1096, + 1097, + 1098, + 1099, + 1102, + 1104, + 1105, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1126, + 1127, + 1128, + 1129, + 1131, + 1132, + 1133, + 1135, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1149, + 1150, + 1151, + 1153, + 1154, + 1155, + 1156, + 1158, + 1159, + 1162, + 1164, + 1165, + 1169, + 1171, + 1172, + 1173, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1195, + 1196, + 1197, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1211, + 1212, + 1215, + 1217, + 1219, + 1221, + 1222, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1232, + 1234, + 1236, + 1237, + 1239, + 1241, + 1242, + 1243, + 1244, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1252, + 1253, + 1255, + 1260, + 1261, + 1262, + 1266, + 1267, + 1268, + 1269, + 1271, + 1272, + 1274, + 1275, + 1277, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1285, + 1287, + 1288, + 1289, + 1291, + 1292, + 1293, + 1294, + 1295, + 1296, + 1298, + 1299, + 1300, + 1302, + 1303, + 1304, + 1305, + 1306, + 1308, + 1309, + 1312, + 1314, + 1316, + 1317, + 1318, + 1319, + 1320, + 1321, + 1323, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1332, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1343, + 1351, + 1356, + 1359, + 1360, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1371, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1386, + 1387, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1414, + 1415, + 1417, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1426, + 1427, + 1428, + 1429, + 1430, + 1432, + 1433, + 1434, + 1435, + 1437, + 1440, + 1441, + 1442, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1455, + 1456, + 1457, + 1458, + 1460, + 1461, + 1462, + 1463, + 1464, + 1466, + 1467, + 1468, + 1470, + 1475, + 1478, + 1481, + 1482, + 1483, + 1484, + 1485, + 1487, + 1488, + 1489, + 1490, + 1493, + 1494, + 1495, + 1498, + 1499, + 1501, + 1502, + 1504, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1516, + 1517, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1529, + 1530, + 1531, + 1532, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1558, + 1559, + 1560, + 1562, + 1563, + 1564, + 1565, + 1567, + 1568, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1582, + 1583, + 1584, + 1585, + 1587, + 1588, + 1589, + 1590, + 1592, + 1593, + 1594, + 1596, + 1599, + 1600, + 1601, + 1604, + 1605, + 1607, + 1608, + 1609, + 1612, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1620, + 1621, + 1622, + 1623, + 1624, + 1625, + 1627, + 1628, + 1629, + 1630, + 1631, + 1633, + 1634, + 1635, + 1636, + 1638, + 1643, + 1647, + 1648, + 1649, + 1650, + 1651, + 1652, + 1654, + 1655, + 1656, + 1657, + 1658, + 1660, + 1662, + 1664, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1675, + 1676, + 1678, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1690, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1703, + 1704, + 1705, + 1706, + 1707, + 1709, + 1711, + 1712, + 1714, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1724, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1736, + 1752, + 1753, + 1754, + 1755, + 1756, + 1757, + 1759, + 1761, + 1762, + 1763, + 1764, + 1765, + 1767, + 1768, + 1769, + 1771, + 1776, + 1777, + 1790, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1798, + 1799, + 1800, + 1801, + 1802, + 1803, + 1806, + 1808, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1819, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1832, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1845, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1854, + 1855, + 1856, + 1857, + 1860, + 1861, + 1862, + 1865, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1875, + 1876, + 1877, + 1879, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1890, + 1911, + 1912, + 1915, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1925, + 1927, + 1928, + 1931, + 1932, + 1933, + 1934, + 1935, + 1936, + 1938, + 1939, + 1940, + 1941, + 1942, + 1943, + 1945, + 1946, + 1947, + 1949, + 1951, + 1955, + 1956, + 1960, + 1961, + 1962, + 1963, + 1965, + 1966, + 1967, + 1969, + 1970, + 1972, + 1973, + 1974, + 1975, + 1976, + 1978, + 1979, + 1980, + 1982, + 1983, + 1984, + 1986, + 1987, + 1988, + 1989, + 1991, + 1992, + 1993, + 1995, + 1996, + 1998, + 1999, + 2000, + 2002, + 2006, + 2007, + 2011, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2021, + 2022, + 2024, + 2025, + 2026, + 2027, + 2028, + 2029, + 2031, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2045, + 2046, + 2048, + 2049, + 2050, + 2054, + 2061, + 2064, + 2067, + 2068, + 2069, + 2071, + 2072, + 2073, + 2075, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2085, + 2086, + 2087, + 2088, + 2089, + 2091, + 2092, + 2094, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2106, + 2107, + 2109, + 2112, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2121, + 2122, + 2124, + 2125, + 2127, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2136, + 2137, + 2139, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2148, + 2149, + 2150, + 2152, + 2153, + 2154, + 2155, + 2157, + 2158, + 2159, + 2161, + 2165, + 2169, + 2170, + 2171, + 2172, + 2174, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2185, + 2186, + 2188, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2198, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2206, + 2207, + 2208, + 2209, + 2213, + 2218, + 2219, + 2220, + 2223, + 2224, + 2226, + 2229, + 2230, + 2232, + 2233, + 2234, + 2235, + 2237, + 2238, + 2240, + 2241, + 2242, + 2243, + 2245, + 2246, + 2247, + 2249, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2259, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2268, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2278, + 2279, + 2280, + 2281, + 2282, + 2283, + 2287, + 2292, + 2296, + 2297, + 2298, + 2299, + 2301, + 2302, + 2303, + 2304, + 2305, + 2307, + 2308, + 2313, + 2314, + 2315, + 2316, + 2319, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2527, + 2528, + 2529, + 2543, + 2557, + 2558, + 2559, + 2560, + 2563, + 2564, + 2566, + 2567, + 2568, + 2569, + 2570, + 2571, + 2572, + 2574, + 2576, + 2577, + 2578, + 2581, + 2582, + 2591, + 2592, + 2593, + 2595, + 2596, + 2598, + 2602, + 2603, + 2604, + 2605, + 2606, + 2608, + 2611, + 2612, + 2614, + 2615, + 2616, + 2617, + 2618, + 2619, + 2620, + 2621, + 2622, + 2623, + 2624, + 2625, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2633, + 2634, + 2635, + 2637, + 2639, + 2640, + 2641, + 2642, + 2643, + 2644, + 2645, + 2646, + 2647, + 2649, + 2650, + 2651, + 2652, + 2654, + 2655, + 2657, + 2658, + 2659, + 2661, + 2662, + 2663, + 2665, + 2670, + 2671, + 2674, + 2675, + 2678, + 2679, + 2680, + 2711, + 2712, + 2715, + 2717, + 2718, + 2719, + 2720, + 2724, + 2725, + 2726, + 2727, + 2728, + 2729, + 2733, + 2734, + 2735, + 2736, + 2737, + 2738, + 2741, + 2742, + 2743, + 2744, + 2745, + 2746, + 2747, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2771, + 2772, + 2774, + 2775, + 2777, + 2778, + 2779, + 2780, + 2781, + 2782, + 2783, + 2785, + 2786, + 2787, + 2788, + 2790, + 2791, + 2792, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2859, + 2865, + 2866, + 2869, + 2871, + 2872, + 2873, + 2874, + 2875, + 2877, + 2879, + 2880, + 2882, + 2883, + 2885, + 2891, + 2892, + 2893, + 2894, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2906, + 2907, + 2908, + 2909, + 2911, + 2912, + 2913, + 2914, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2924, + 2926, + 2928, + 2930, + 2931, + 2932, + 2942, + 2943, + 2944, + 2945, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2954, + 2955, + 2956, + 2957, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2966, + 2967, + 2968, + 2970, + 2971, + 2973, + 2974, + 2976, + 2977, + 2979, + 2982, + 2995, + 2996, + 2997, + 2999, + 3000, + 3001, + 3002, + 3004, + 3005, + 3006, + 3011, + 3012, + 3013, + 3014, + 3016, + 3017, + 3026, + 3027, + 3028, + 3031, + 3034, + 3035, + 3037, + 3038, + 3039, + 3040, + 3041, + 3042, + 3043, + 3044, + 3046, + 3047, + 3048, + 3049, + 3050, + 3052, + 3053, + 3054, + 3055, + 3056, + 3057, + 3058, + 3060, + 3064, + 3065, + 3066, + 3067, + 3068, + 3069, + 3070, + 3071, + 3073, + 3074, + 3075, + 3076, + 3077, + 3078, + 3082, + 3083, + 3084, + 3085, + 3086, + 3087, + 3088, + 3089, + 3091, + 3092, + 3093, + 3094, + 3095, + 3096, + 3097, + 3101, + 3102, + 3103, + 3104, + 3105, + 3106, + 3107, + 3108, + 3110, + 3111, + 3112, + 3113, + 3114, + 3115, + 3116, + 3122, + 3125, + 3138, + 3139, + 3140, + 3141, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3151, + 3152, + 3153, + 3156, + 3157, + 3158, + 3159, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3167, + 3168, + 3169, + 3170, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3184, + 3185, + 3186, + 3187, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3199, + 3200, + 3201, + 3202, + 3204, + 3205, + 3207, + 3208, + 3209, + 3210, + 3212, + 3213, + 3215, + 3216, + 3218, + 3219 + ], + "stdout": "........................................................................ [ 83%]\n.............. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-4nukdt1w\\result.xml -\n86 passed in 43.47s\n", + "stderr": "" + } + } + ], + "executed_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/proofs_dimred_visualizer.py": "6fd1f1ed7d1cc5202f8835b3e32ab838d5c9df05754e11d524af05c744f1fbd3", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3" + } +} diff --git a/audit/m28_review_mutations_final_results.json b/audit/m28_review_mutations_final_results.json new file mode 100644 index 0000000..5eb207d --- /dev/null +++ b/audit/m28_review_mutations_final_results.json @@ -0,0 +1,10083 @@ +{ + "active_head": "0c06cfd497579c5f99fd957c97ca28a052494bd4", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6" + }, + "mode": "mutations", + "runs": [ + { + "name": "M01_color_row_roll", + "method": "plot_embedding", + "selection": "embedding_exact_observation", + "changed_lines": [ + 528 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "fbb7900faa59e5ae27981ef362e9ee99e219001a78cd03f3f8854d4bd679b3e1", + "patch": "--- \n+++ \n@@ -525,7 +525,7 @@\n # Chaque classe est trac\u00e9e s\u00e9par\u00e9ment pour g\u00e9rer couleur + marqueur.\n classes = np.unique(y)\n for cls in classes:\n- mask = y == cls\n+ mask = np.roll(y == cls, 1)\n ax.scatter(\n Z[mask, 0],\n Z[mask, 1],\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "embedding_exact_observation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n3 passed, 57 deselected in 0.90s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "embedding_exact_observation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:47: in test_embedding_exact_observation_associations\n assert_array_equal(offsets(sc), c.Z[c.y == cls])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 41.0 (ACTUAL), 7.0 (DESIRED)\nE [0, 1]: 13.0 (ACTUAL), 31.0 (DESIRED)\nE Max absolute difference among violations: 34.\nE Max relative difference among violations: 4.85714286\nE ACTUAL: array([[41., 13.]])\nE DESIRED: array([[ 7., 31.]])" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F.. [100%]\n================================== FAILURES ===================================\n___________ test_embedding_exact_observation_associations[classes] ____________\ntests\\test_dimred_visualizer.py:47: in test_embedding_exact_observation_associations\n assert_array_equal(offsets(sc), c.Z[c.y == cls])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 41.0 (ACTUAL), 7.0 (DESIRED)\nE [0, 1]: 13.0 (ACTUAL), 31.0 (DESIRED)\nE Max absolute difference among violations: 34.\nE Max relative difference among violations: 4.85714286\nE ACTUAL: array([[41., 13.]])\nE DESIRED: array([[ 7., 31.]])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_embedding_exact_observation_associations[classes]\n1 failed, 2 passed, 57 deselected in 1.04s\n", + "stderr": "" + } + }, + { + "name": "M02_variance_units", + "method": "plot_variance_explained", + "selection": "real_pca_variance", + "changed_lines": [ + 154 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "0026e09d1cd7f509e47cea034e79cdff94c6037a4a7ceaaa50d0b42ae70b7fcf", + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n1 passed, 59 deselected in 2.96s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:117: in test_real_pca_variance_and_reconstruction_energy\n assert_allclose(heights(axes[0]), np.array([9, 4, 1]) / 14 * 100)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.6428571428571428 (ACTUAL), 64.28571428571429 (DESIRED)\nE [1]: 0.2857142857142857 (ACTUAL), 28.57142857142857 (DESIRED)\nE [2]: 0.07142857142857142 (ACTUAL), 7.142857142857142 (DESIRED)\nE Max absolute difference among violations: 63.64285714\nE Max relative difference among violations: 0.99\nE ACTUAL: array([0.642857, 0.285714, 0.071429])\nE DESIRED: array([64.285714, 28.571429, 7.142857])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______________ test_real_pca_variance_and_reconstruction_energy _______________\ntests\\test_dimred_visualizer.py:117: in test_real_pca_variance_and_reconstruction_energy\n assert_allclose(heights(axes[0]), np.array([9, 4, 1]) / 14 * 100)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.6428571428571428 (ACTUAL), 64.28571428571429 (DESIRED)\nE [1]: 0.2857142857142857 (ACTUAL), 28.57142857142857 (DESIRED)\nE [2]: 0.07142857142857142 (ACTUAL), 7.142857142857142 (DESIRED)\nE Max absolute difference among violations: 63.64285714\nE Max relative difference among violations: 0.99\nE ACTUAL: array([0.642857, 0.285714, 0.071429])\nE DESIRED: array([64.285714, 28.571429, 7.142857])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_pca_variance_and_reconstruction_energy\n1 failed, 59 deselected in 2.94s\n", + "stderr": "" + } + }, + { + "name": "M03_best_is_max", + "method": "plot_training_history", + "selection": "training_history_minimum", + "changed_lines": [ + 1048 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "be86a4cc9d42b00927f9f7478ce5938b3f78e432208053698595573184c30360", + "patch": "--- \n+++ \n@@ -1045,7 +1045,7 @@\n ax.plot(epochs, train_loss, color=\"#4C72B0\", lw=2, label=\"Train\")\n ax.plot(epochs, val_loss, color=\"#DD8452\", lw=2, ls=\"--\", label=\"Validation\")\n # Best epoch d\u00e9fini sur la val_loss minimale (crit\u00e8re de s\u00e9lection mod\u00e8le).\n- best_epoch = int(np.argmin(val_loss)) + 1\n+ best_epoch = int(np.argmax(val_loss)) + 1\n best_val = min(val_loss)\n ax.axvline(\n best_epoch,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "training_history_minimum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n2 passed, 58 deselected in 1.29s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "training_history_minimum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:238: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:238: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n____ test_training_history_minimum_is_not_last_and_distinct_series[False] _____\ntests\\test_dimred_visualizer.py:238: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])\n_____ test_training_history_minimum_is_not_last_and_distinct_series[True] _____\ntests\\test_dimred_visualizer.py:238: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_training_history_minimum_is_not_last_and_distinct_series[False]\nFAILED tests/test_dimred_visualizer.py::test_training_history_minimum_is_not_last_and_distinct_series[True]\n2 failed, 58 deselected in 1.49s\n", + "stderr": "" + } + }, + { + "name": "M04_family_median", + "method": "plot_ae_error_by_family", + "selection": "error_family_mean", + "changed_lines": [ + 2740, + 2742 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "0c1e0f746f1208318c3a41311cf26ca2247439221e86b8fb26a7f94c2d6ca839", + "patch": "--- \n+++ \n@@ -2739,7 +2739,7 @@\n # Agr\u00e9gation par famille pour r\u00e9sum\u00e9 interpr\u00e9table.\n df_fam = (\n df_feat_mse.groupby(\"family\")[\"mse\"]\n- .agg([\"mean\", \"std\", \"count\"])\n+ .agg([\"median\", \"std\", \"count\"]).rename(columns={\"median\": \"mean\"})\n .rename(columns={\"mean\": \"mse_mean\", \"std\": \"mse_std\", \"count\": \"n_feats\"})\n .reset_index()\n .sort_values(\"mse_mean\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "error_family_mean", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n1 passed, 59 deselected in 0.79s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "error_family_mean", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:313: in test_error_family_mean_is_feature_weighted_and_std_is_between_features\n assert_allclose(widths(axes[0]), [2.5, 50 / 3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 2 (50%)\nE Mismatch at index:\nE [1]: 16.0 (ACTUAL), 16.666666666666668 (DESIRED)\nE Max absolute difference among violations: 0.66666667\nE Max relative difference among violations: 0.04\nE ACTUAL: array([ 2.5, 16. ])\nE DESIRED: array([ 2.5 , 16.666667])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n___ test_error_family_mean_is_feature_weighted_and_std_is_between_features ____\ntests\\test_dimred_visualizer.py:313: in test_error_family_mean_is_feature_weighted_and_std_is_between_features\n assert_allclose(widths(axes[0]), [2.5, 50 / 3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 2 (50%)\nE Mismatch at index:\nE [1]: 16.0 (ACTUAL), 16.666666666666668 (DESIRED)\nE Max absolute difference among violations: 0.66666667\nE Max relative difference among violations: 0.04\nE ACTUAL: array([ 2.5, 16. ])\nE DESIRED: array([ 2.5 , 16.666667])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_error_family_mean_is_feature_weighted_and_std_is_between_features\n1 failed, 59 deselected in 0.95s\n", + "stderr": "" + } + }, + { + "name": "M05_ae_as_pca", + "method": "plot_ae_vs_pca", + "selection": "ae_pca_comparison", + "changed_lines": [ + 1235, + 1236 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "4490d68bd49df52e8e3e33fcd3f3deb6afafc15b43d98456789b3a77da97d69c", + "patch": "--- \n+++ \n@@ -1233,7 +1233,7 @@\n for _, row in ae_df.iterrows():\n # Chaque AE est repr\u00e9sent\u00e9 par une ligne horizontale de performance.\n ax.axhline(\n- row[\"mse_mean\"], color=\"#DD8452\", ls=\"--\", lw=2, label=row[\"method\"]\n+ pca_df[\"mse_mean\"].iloc[0], color=\"#DD8452\", ls=\"--\", lw=2, label=row[\"method\"]\n )\n ax.annotate(\n # Position d'annotation choisie pour rester lisible sur la courbe PCA.\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "ae_pca_comparison", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n1 passed, 59 deselected in 0.75s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "ae_pca_comparison", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:273: in test_ae_pca_comparison_does_not_substitute_metrics\n assert_allclose(ax.lines[1].get_ydata(), [0.17, 0.17])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE [1]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE Max absolute difference among violations: 0.73\nE Max relative difference among violations: 4.29411765\nE ACTUAL: array([0.9, 0.9])\nE DESIRED: array([0.17, 0.17])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_____________ test_ae_pca_comparison_does_not_substitute_metrics ______________\ntests\\test_dimred_visualizer.py:273: in test_ae_pca_comparison_does_not_substitute_metrics\n assert_allclose(ax.lines[1].get_ydata(), [0.17, 0.17])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE [1]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE Max absolute difference among violations: 0.73\nE Max relative difference among violations: 4.29411765\nE ACTUAL: array([0.9, 0.9])\nE DESIRED: array([0.17, 0.17])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_ae_pca_comparison_does_not_substitute_metrics\n1 failed, 59 deselected in 0.86s\n", + "stderr": "" + } + }, + { + "name": "M06_identity_reconstruction", + "method": "plot_ae_reconstruction", + "selection": "reconstruction_drawn_rows", + "changed_lines": [ + 1182 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "9d374b178f5f5ea7f05df0b08d34b31f12680c59bb26223a5818b649832fa9f4", + "patch": "--- \n+++ \n@@ -1179,7 +1179,7 @@\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n- recon = X_recon[si]\n+ recon = X[si]\n mse_i = float(np.mean((orig - recon) ** 2))\n ax.plot(x_pos, orig, color=\"#4C72B0\", lw=1.5, alpha=0.9, label=\"Original\")\n ax.plot(\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n3 passed, 57 deselected in 1.19s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:254: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 11.0 (ACTUAL), 12.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 4.0 (DESIRED)\nE Max absolute difference among violations: 2.\nE Max relative difference among violations: 0.5\nE ACTUAL: array([11., 2.])\nE DESIRED: array([12., 4.])" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:254: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 25.0 (DESIRED)\nE [1]: 43.0 (ACTUAL), 55.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.24\nE ACTUAL: array([19., 43.])\nE DESIRED: array([25., 55.])" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:254: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 3.0 (ACTUAL), 5.0 (DESIRED)\nE [1]: 17.0 (ACTUAL), 21.0 (DESIRED)\nE Max absolute difference among violations: 4.\nE Max relative difference among violations: 0.4\nE ACTUAL: array([ 3., 17.])\nE DESIRED: array([ 5., 21.])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFF [100%]\n================================== FAILURES ===================================\n______________ test_reconstruction_drawn_rows_and_manual_mse[1] _______________\ntests\\test_dimred_visualizer.py:254: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 11.0 (ACTUAL), 12.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 4.0 (DESIRED)\nE Max absolute difference among violations: 2.\nE Max relative difference among violations: 0.5\nE ACTUAL: array([11., 2.])\nE DESIRED: array([12., 4.])\n______________ test_reconstruction_drawn_rows_and_manual_mse[3] _______________\ntests\\test_dimred_visualizer.py:254: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 25.0 (DESIRED)\nE [1]: 43.0 (ACTUAL), 55.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.24\nE ACTUAL: array([19., 43.])\nE DESIRED: array([25., 55.])\n______________ test_reconstruction_drawn_rows_and_manual_mse[6] _______________\ntests\\test_dimred_visualizer.py:254: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 3.0 (ACTUAL), 5.0 (DESIRED)\nE [1]: 17.0 (ACTUAL), 21.0 (DESIRED)\nE Max absolute difference among violations: 4.\nE Max relative difference among violations: 0.4\nE ACTUAL: array([ 3., 17.])\nE DESIRED: array([ 5., 21.])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_reconstruction_drawn_rows_and_manual_mse[1]\nFAILED tests/test_dimred_visualizer.py::test_reconstruction_drawn_rows_and_manual_mse[3]\nFAILED tests/test_dimred_visualizer.py::test_reconstruction_drawn_rows_and_manual_mse[6]\n3 failed, 57 deselected in 1.41s\n", + "stderr": "" + } + }, + { + "name": "M07_hr_color_roll", + "method": "plot_hr_diagram_embedding", + "selection": "hr_finite_triplets", + "changed_lines": [ + 920, + 923 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "9747542c8f796dcfe2334714186a9d2f1f6a2e0de7604ec1c1feb5eddbce86b4", + "patch": "--- \n+++ \n@@ -920,7 +920,7 @@\n sc = ax.scatter(\n teff[valid],\n logg[valid],\n- c=z_coord[valid],\n+ c=np.roll(z_coord[valid], 1),\n cmap=self.cmap_continuous,\n s=2,\n alpha=0.5,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "hr_finite_triplets", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 907, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n2 passed, 58 deselected in 1.07s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "hr_finite_triplets", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:97: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 11.0 (DESIRED)\nE [1]: 11.0 (ACTUAL), 23.0 (DESIRED)\nE [2]: 23.0 (ACTUAL), 19.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.72727273\nE ACTUAL: MaskedArray([19., 11., 23.])\nE DESIRED: array([11., 23., 19.])" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:97: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 43.0 (ACTUAL), 2.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 5.0 (DESIRED)\nE [2]: 5.0 (ACTUAL), 43.0 (DESIRED)\nE Max absolute difference among violations: 41.\nE Max relative difference among violations: 20.5\nE ACTUAL: MaskedArray([43., 2., 5.])\nE DESIRED: array([ 2., 5., 43.])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 907, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________________ test_hr_finite_triplets_and_physical_axes[0] _________________\ntests\\test_dimred_visualizer.py:97: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 11.0 (DESIRED)\nE [1]: 11.0 (ACTUAL), 23.0 (DESIRED)\nE [2]: 23.0 (ACTUAL), 19.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.72727273\nE ACTUAL: MaskedArray([19., 11., 23.])\nE DESIRED: array([11., 23., 19.])\n________________ test_hr_finite_triplets_and_physical_axes[1] _________________\ntests\\test_dimred_visualizer.py:97: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 43.0 (ACTUAL), 2.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 5.0 (DESIRED)\nE [2]: 5.0 (ACTUAL), 43.0 (DESIRED)\nE Max absolute difference among violations: 41.\nE Max relative difference among violations: 20.5\nE ACTUAL: MaskedArray([43., 2., 5.])\nE DESIRED: array([ 2., 5., 43.])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_hr_finite_triplets_and_physical_axes[0]\nFAILED tests/test_dimred_visualizer.py::test_hr_finite_triplets_and_physical_axes[1]\n2 failed, 58 deselected in 1.28s\n", + "stderr": "" + } + }, + { + "name": "M08_cluster_colors", + "method": "plot_hdbscan_clusters", + "selection": "real_analyzer_state", + "changed_lines": [ + 1390, + 1393 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "4c7322cb7de655cb5ea317a71b8cec2ec4de336c2e1866b9f78c378a3ae00a1b", + "patch": "--- \n+++ \n@@ -1390,7 +1390,7 @@\n ax.scatter(\n Z[mask, 0],\n Z[mask, 1],\n- c=[color_map[cid]],\n+ c=[color_map[cluster_ids[-1]]],\n s=2,\n alpha=0.75,\n rasterized=True,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n3 passed, 57 deselected in 1.17s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:397: in test_hdbscan_real_analyzer_state_and_point_populations\n assert_allclose(sc.get_facecolors()[0, :3], hdb.color_map_[cid][:3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F.. [100%]\n================================== FAILURES ===================================\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels0] _______\ntests\\test_dimred_visualizer.py:397: in test_hdbscan_real_analyzer_state_and_point_populations\n assert_allclose(sc.get_facecolors()[0, :3], hdb.color_map_[cid][:3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels0]\n1 failed, 2 passed, 57 deselected in 1.34s\n", + "stderr": "" + } + }, + { + "name": "M09_tsne_as_umap", + "method": "plot_trustworthiness", + "selection": "real_sklearn_trustworthiness", + "changed_lines": [ + 2244 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "219f76a998ddc435edb3c68374e089462acdda0d735e2384192c4c04d16aab75", + "patch": "--- \n+++ \n@@ -2241,7 +2241,7 @@\n with warnings.catch_warnings():\n warnings.simplefilter(\"ignore\")\n tu = trustworthiness(X_sub, Zu_sub, n_neighbors=k, metric=\"euclidean\")\n- tt = trustworthiness(X_sub, Zt_sub, n_neighbors=k, metric=\"euclidean\")\n+ tt = trustworthiness(X_sub, Zu_sub, n_neighbors=k, metric=\"euclidean\")\n # Stocke T(k) pour les deux m\u00e9thodes afin de tracer la courbe comparative.\n trust_u.append(tu)\n trust_t.append(tt)\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n2 passed, 58 deselected in 3.08s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 24 / 24 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -1.14005850694597 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 0.8518760376374508 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: -0.9468537822225308 (ACTUAL), -0.6451940968015629 (DESIRED)\nE [1, 1]: -0.2999476978380483 (ACTUAL), 0.0825255266666682 (DESIRED)\nE [2, 0]: 0.7540394717615756 (ACTUAL), -0.11873997633083841 (DESIRED)\nE Max absolute difference among violations: 3.39499489\nE Max relative difference among violations: 13.23342732\nE ACTUAL: array([[-1.140059, 0.851876],\nE [-0.946854, -0.299948],\nE [ 0.754039, 1.994789],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-0.645194, 0.082526],\nE [-0.11874 , -1.400206],..." + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 18 / 18 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -1.14005850694597 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 0.8518760376374508 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: -1.215555026777933 (ACTUAL), -1.0861640144823521 (DESIRED)\nE [1, 1]: 0.13882201829008786 (ACTUAL), -0.5693158913378338 (DESIRED)\nE [2, 0]: -0.13429338949088465 (ACTUAL), -1.215555026777933 (DESIRED)\nE Max absolute difference among violations: 3.39499489\nE Max relative difference among violations: 7.48292869\nE ACTUAL: array([[-1.140059, 0.851876],\nE [-1.215555, 0.138822],\nE [-0.134293, 1.177617],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-1.086164, -0.569316],\nE [-1.215555, 0.138822],..." + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[12] ________\ntests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 24 / 24 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -1.14005850694597 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 0.8518760376374508 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: -0.9468537822225308 (ACTUAL), -0.6451940968015629 (DESIRED)\nE [1, 1]: -0.2999476978380483 (ACTUAL), 0.0825255266666682 (DESIRED)\nE [2, 0]: 0.7540394717615756 (ACTUAL), -0.11873997633083841 (DESIRED)\nE Max absolute difference among violations: 3.39499489\nE Max relative difference among violations: 13.23342732\nE ACTUAL: array([[-1.140059, 0.851876],\nE [-0.946854, -0.299948],\nE [ 0.754039, 1.994789],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-0.645194, 0.082526],\nE [-0.11874 , -1.400206],...\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[9] _________\ntests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 18 / 18 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -1.14005850694597 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 0.8518760376374508 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: -1.215555026777933 (ACTUAL), -1.0861640144823521 (DESIRED)\nE [1, 1]: 0.13882201829008786 (ACTUAL), -0.5693158913378338 (DESIRED)\nE [2, 0]: -0.13429338949088465 (ACTUAL), -1.215555026777933 (DESIRED)\nE Max absolute difference among violations: 3.39499489\nE Max relative difference among violations: 7.48292869\nE ACTUAL: array([[-1.140059, 0.851876],\nE [-1.215555, 0.138822],\nE [-0.134293, 1.177617],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-1.086164, -0.569316],\nE [-1.215555, 0.138822],...\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[12]\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[9]\n2 failed, 58 deselected in 3.45s\n", + "stderr": "" + } + }, + { + "name": "M10_confidence_constant", + "method": "plot_xgboost_umap", + "selection": "xgboost_classes_confidence", + "changed_lines": [ + 2095, + 2098 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "f1bb69629105b2443c7a96086390fc68bde21d1e395b2ea7129ac0dae024f231", + "patch": "--- \n+++ \n@@ -2095,7 +2095,7 @@\n sc = ax.scatter(\n Z_umap_aligned[:, 0],\n Z_umap_aligned[:, 1],\n- c=confidence,\n+ c=np.ones(len(confidence)),\n cmap=\"RdYlGn\",\n vmin=0.4,\n vmax=1.0,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n2 passed, 58 deselected in 1.05s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:518: in test_xgboost_classes_confidence_and_cluster_associations\n assert_array_equal(axes[1].collections[0].get_array(), confidence)\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 6 / 6 (100%)\nE First 5 mismatches are at indices:\nE [0]: 1.0 (ACTUAL), 0.45 (DESIRED)\nE [1]: 1.0 (ACTUAL), 0.7 (DESIRED)\nE [2]: 1.0 (ACTUAL), 0.95 (DESIRED)\nE [3]: 1.0 (ACTUAL), 0.6 (DESIRED)\nE [4]: 1.0 (ACTUAL), 0.8 (DESIRED)\nE Max absolute difference among violations: 0.55\nE Max relative difference among violations: 1.22222222\nE ACTUAL: MaskedArray([1., 1., 1., 1., 1., 1.])\nE DESIRED: array([0.45, 0.7 , 0.95, 0.6 , 0.8 , 0.5 ])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".F [100%]\n================================== FAILURES ===================================\n____ test_xgboost_classes_confidence_and_cluster_associations[confidence1] ____\ntests\\test_dimred_visualizer.py:518: in test_xgboost_classes_confidence_and_cluster_associations\n assert_array_equal(axes[1].collections[0].get_array(), confidence)\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 6 / 6 (100%)\nE First 5 mismatches are at indices:\nE [0]: 1.0 (ACTUAL), 0.45 (DESIRED)\nE [1]: 1.0 (ACTUAL), 0.7 (DESIRED)\nE [2]: 1.0 (ACTUAL), 0.95 (DESIRED)\nE [3]: 1.0 (ACTUAL), 0.6 (DESIRED)\nE [4]: 1.0 (ACTUAL), 0.8 (DESIRED)\nE Max absolute difference among violations: 0.55\nE Max relative difference among violations: 1.22222222\nE ACTUAL: MaskedArray([1., 1., 1., 1., 1., 1.])\nE DESIRED: array([0.45, 0.7 , 0.95, 0.6 , 0.8 , 0.5 ])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_xgboost_classes_confidence_and_cluster_associations[confidence1]\n1 failed, 1 passed, 58 deselected in 1.19s\n", + "stderr": "" + } + }, + { + "name": "M11_synthesis_ae_as_pca", + "method": "plot_synthesis_grid", + "selection": "synthesis_preserves", + "changed_lines": [ + 2887 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "4f007fdb7dcae0839188918aad4eb9f77662409d9c1413989ff8d3ddeed36082", + "patch": "--- \n+++ \n@@ -2884,7 +2884,7 @@\n if Z_umap is not None:\n # UMAP est optionnel selon le notebook ex\u00e9cut\u00e9.\n METHODS.append((\"UMAP\", Z_umap, \"UMAP 1\", \"UMAP 2\"))\n- METHODS.append((\"Autoencodeur\", Z_ae, \"Latent 1\", \"Latent 2\"))\n+ METHODS.append((\"Autoencodeur\", scores_pca, \"Latent 1\", \"Latent 2\"))\n \n PARAMS = [\n (\"Classe spectrale\", None, None),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n2 passed, 58 deselected in 0.98s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:662: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:662: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[False] ___\ntests\\test_dimred_visualizer.py:662: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[True] ____\ntests\\test_dimred_visualizer.py:662: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]\n2 failed, 58 deselected in 1.15s\n", + "stderr": "" + } + }, + { + "name": "M12_stability_median", + "method": "plot_stability", + "selection": "stability_producer", + "changed_lines": [ + 740, + 744 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "c521e47969b0df802a97ecf521f45fca1a471bac3804187362b0ac01038a728f", + "patch": "--- \n+++ \n@@ -741,7 +741,7 @@\n 0.98,\n 0.97,\n # Convention actuelle: on exclut souvent seed de r\u00e9f\u00e9rence (index 0) de la moyenne.\n- f\"Moyenne : {dists[1:].mean():.4f}\" if len(dists) > 1 else \"\",\n+ f\"Moyenne : {np.median(dists[1:]):.4f}\" if len(dists) > 1 else \"\",\n transform=ax.transAxes,\n ha=\"right\",\n va=\"top\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "stability_producer", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n1 passed, 59 deselected in 1.12s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "stability_producer", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:632: in test_stability_producer_order_and_mean_without_reference\n assert f\"{expected:.4f}\" in text(ax)\nE assert '0.0120' in 'Moyenne : 0.0057'\nE + where 'Moyenne : 0.0057' = text()" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n__________ test_stability_producer_order_and_mean_without_reference ___________\ntests\\test_dimred_visualizer.py:632: in test_stability_producer_order_and_mean_without_reference\n assert f\"{expected:.4f}\" in text(ax)\nE assert '0.0120' in 'Moyenne : 0.0057'\nE + where 'Moyenne : 0.0057' = text()\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_stability_producer_order_and_mean_without_reference\n1 failed, 59 deselected in 1.25s\n", + "stderr": "" + } + }, + { + "name": "M13_profile_sign_erased", + "method": "plot_hdbscan_feature_profiles", + "selection": "profiles_signed_top", + "changed_lines": [ + 2026 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "91e32e38df5eeff868d93e08f22bde30dfd975fd423fe2b1a239a738d636a7cc", + "patch": "--- \n+++ \n@@ -2023,7 +2023,7 @@\n profile = cluster_means.loc[cid]\n # Top-5 par amplitude absolue (exc\u00e8s ou d\u00e9ficit).\n top5 = profile.abs().nlargest(5).index.tolist()\n- vals = profile[top5].values\n+ vals = np.abs(profile[top5].values)\n colors = [\"#C0392B\" if v > 0 else \"#2980B9\" for v in vals]\n labels = [\n f.replace(\"feature_\", \"\").replace(\"_eq_width\", \"\\nEW\")[:14]\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "profiles_signed_top", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n1 passed, 59 deselected in 0.78s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "profiles_signed_top", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:489: in test_cluster_profiles_signed_top_five_not_first_five\n assert_allclose(widths(axes[0]), [2, 0.9, -0.6, 0.4, -0.1])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 5 (40%)\nE Mismatch at indices:\nE [2]: 0.6 (ACTUAL), -0.6 (DESIRED)\nE [4]: 0.1 (ACTUAL), -0.1 (DESIRED)\nE Max absolute difference among violations: 1.2\nE Max relative difference among violations: 2.\nE ACTUAL: array([2. , 0.9, 0.6, 0.4, 0.1])\nE DESIRED: array([ 2. , 0.9, -0.6, 0.4, -0.1])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_cluster_profiles_signed_top_five_not_first_five _____________\ntests\\test_dimred_visualizer.py:489: in test_cluster_profiles_signed_top_five_not_first_five\n assert_allclose(widths(axes[0]), [2, 0.9, -0.6, 0.4, -0.1])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 5 (40%)\nE Mismatch at indices:\nE [2]: 0.6 (ACTUAL), -0.6 (DESIRED)\nE [4]: 0.1 (ACTUAL), -0.1 (DESIRED)\nE Max absolute difference among violations: 1.2\nE Max relative difference among violations: 2.\nE ACTUAL: array([2. , 0.9, 0.6, 0.4, 0.1])\nE DESIRED: array([ 2. , 0.9, -0.6, 0.4, -0.1])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_cluster_profiles_signed_top_five_not_first_five\n1 failed, 59 deselected in 0.94s\n", + "stderr": "" + } + }, + { + "name": "M14_density_wrong_population", + "method": "plot_ae_error_distribution", + "selection": "histogram_densities", + "changed_lines": [ + 1324, + 1329 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "d5407d955fea773baff307002def63203823044aaeb4696dac2eed4d256b0523", + "patch": "--- \n+++ \n@@ -1326,7 +1326,7 @@\n bins=60,\n alpha=0.55,\n color=color,\n- density=True,\n+ density=False,\n label=f\"{cls} (n={mask.sum()}, \u03bc={vals.mean():.4f})\",\n )\n # M\u00e9diane trac\u00e9e pour robuste comparaison inter-classes.\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "histogram_densities", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n1 passed, 59 deselected in 1.56s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "histogram_densities", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:355: in test_histogram_densities_integrate_and_class_mean_median_are_distinct\n assert_allclose(sum(p.get_width() * p.get_height() for p in container), 1)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98333333\nE Max relative difference among violations: 0.98333333\nE ACTUAL: array(0.016667)\nE DESIRED: array(1)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____ test_histogram_densities_integrate_and_class_mean_median_are_distinct ____\ntests\\test_dimred_visualizer.py:355: in test_histogram_densities_integrate_and_class_mean_median_are_distinct\n assert_allclose(sum(p.get_width() * p.get_height() for p in container), 1)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98333333\nE Max relative difference among violations: 0.98333333\nE ACTUAL: array(0.016667)\nE DESIRED: array(1)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_histogram_densities_integrate_and_class_mean_median_are_distinct\n1 failed, 59 deselected in 1.07s\n", + "stderr": "" + } + }, + { + "name": "M15_kde_wrong_population", + "method": "plot_latent_kde", + "selection": "real_kde_reproducible", + "changed_lines": [ + 2401 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "91bfc71fabb5fb950157bfc2ac827c4aab3d866ca76c10d44bbf20516aa17911", + "patch": "--- \n+++ \n@@ -2398,7 +2398,7 @@\n from scipy.stats import gaussian_kde\n \n # KDE restreint \u00e0 la population stellaire pour une lecture astrophysique propre.\n- star_mask = y == \"STAR\"\n+ star_mask = np.ones(len(y), dtype=bool)\n Z_stars = Z_ae[star_mask]\n teff_s = (\n meta[\"teff_gspphot\"].values[star_mask].astype(float)\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n1 passed, 59 deselected in 2.48s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:731: in test_real_kde_reproducible_star_selection_and_observation_colors\n assert len(actual) == 119\nE assert 139 == 119\nE + where 139 = len(array([[ 1.46143263e+00, 5.04194549e-01],\\n [-1.58198440e-01, -4.02871589e-01],\\n [-5.12655840e-01, 8.0166....62051618e-01, -1.22073795e+00],\\n [-2.43641605e-01, -8.00208551e-01],\\n [-1.00969481e+00, 6.69136452e-01]]))" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_real_kde_reproducible_star_selection_and_observation_colors _______\ntests\\test_dimred_visualizer.py:731: in test_real_kde_reproducible_star_selection_and_observation_colors\n assert len(actual) == 119\nE assert 139 == 119\nE + where 139 = len(array([[ 1.46143263e+00, 5.04194549e-01],\\n [-1.58198440e-01, -4.02871589e-01],\\n [-5.12655840e-01, 8.0166....62051618e-01, -1.22073795e+00],\\n [-2.43641605e-01, -8.00208551e-01],\\n [-1.00969481e+00, 6.69136452e-01]]))\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_kde_reproducible_star_selection_and_observation_colors\n1 failed, 59 deselected in 2.53s\n", + "stderr": "" + } + }, + { + "name": "M16_export_blank_figure", + "method": "_save", + "selection": "real_export_readable", + "changed_lines": [ + 1018 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "c686947be404c32bf911a0cff410356af8ec385c229db14da4dc8ed8823359f1", + "patch": "--- \n+++ \n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ plt.figure().savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n2 passed, 58 deselected in 1.21s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:684: in test_real_export_readable_and_same_semantic_figure\n assert pixels.shape[0] > 100 and pixels.std() > 1\nE assert (250 > 100 and np.float64(0.0) > 1)\nE + where np.float64(0.0) = ()\nE + where = array([[[255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255],\\n ...,\\n [255, 255, 255],\\n ... ...,\\n [255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255]]], shape=(250, 330, 3), dtype=uint8).std" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F. [100%]\n================================== FAILURES ===================================\n___________ test_real_export_readable_and_same_semantic_figure[png] ___________\ntests\\test_dimred_visualizer.py:684: in test_real_export_readable_and_same_semantic_figure\n assert pixels.shape[0] > 100 and pixels.std() > 1\nE assert (250 > 100 and np.float64(0.0) > 1)\nE + where np.float64(0.0) = ()\nE + where = array([[[255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255],\\n ...,\\n [255, 255, 255],\\n ... ...,\\n [255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255]]], shape=(250, 330, 3), dtype=uint8).std\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_export_readable_and_same_semantic_figure[png]\n1 failed, 1 passed, 58 deselected in 1.09s\n", + "stderr": "" + } + } + ], + "executed_files_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/proofs_dimred_visualizer.py": "6fd1f1ed7d1cc5202f8835b3e32ab838d5c9df05754e11d524af05c744f1fbd3", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3" + }, + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "............................................................ [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-m4qa0hcq\\result.xml -\n60 passed in 18.24s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_review_mutations_results.json b/audit/m28_review_mutations_results.json new file mode 100644 index 0000000..c1533f9 --- /dev/null +++ b/audit/m28_review_mutations_results.json @@ -0,0 +1,10083 @@ +{ + "active_head": "4364c61f56d91f7ec93c5c6072b9f88c46023241", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7fd6d4164a9bd50a52e3a47e79eef197c7963dcc6cd5e96be4231383e7ca3a25", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6" + }, + "mode": "mutations", + "runs": [ + { + "name": "M01_color_row_roll", + "method": "plot_embedding", + "selection": "embedding_exact_observation", + "changed_lines": [ + 528 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "fbb7900faa59e5ae27981ef362e9ee99e219001a78cd03f3f8854d4bd679b3e1", + "patch": "--- \n+++ \n@@ -525,7 +525,7 @@\n # Chaque classe est trac\u00e9e s\u00e9par\u00e9ment pour g\u00e9rer couleur + marqueur.\n classes = np.unique(y)\n for cls in classes:\n- mask = y == cls\n+ mask = np.roll(y == cls, 1)\n ax.scatter(\n Z[mask, 0],\n Z[mask, 1],\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "embedding_exact_observation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n3 passed, 57 deselected in 0.87s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "embedding_exact_observation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:47: in test_embedding_exact_observation_associations\n assert_array_equal(offsets(sc), c.Z[c.y == cls])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 41.0 (ACTUAL), 7.0 (DESIRED)\nE [0, 1]: 13.0 (ACTUAL), 31.0 (DESIRED)\nE Max absolute difference among violations: 34.\nE Max relative difference among violations: 4.85714286\nE ACTUAL: array([[41., 13.]])\nE DESIRED: array([[ 7., 31.]])" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F.. [100%]\n================================== FAILURES ===================================\n___________ test_embedding_exact_observation_associations[classes] ____________\ntests\\test_dimred_visualizer.py:47: in test_embedding_exact_observation_associations\n assert_array_equal(offsets(sc), c.Z[c.y == cls])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 41.0 (ACTUAL), 7.0 (DESIRED)\nE [0, 1]: 13.0 (ACTUAL), 31.0 (DESIRED)\nE Max absolute difference among violations: 34.\nE Max relative difference among violations: 4.85714286\nE ACTUAL: array([[41., 13.]])\nE DESIRED: array([[ 7., 31.]])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_embedding_exact_observation_associations[classes]\n1 failed, 2 passed, 57 deselected in 1.00s\n", + "stderr": "" + } + }, + { + "name": "M02_variance_units", + "method": "plot_variance_explained", + "selection": "real_pca_variance", + "changed_lines": [ + 154 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "0026e09d1cd7f509e47cea034e79cdff94c6037a4a7ceaaa50d0b42ae70b7fcf", + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n1 passed, 59 deselected in 2.89s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:117: in test_real_pca_variance_and_reconstruction_energy\n assert_allclose(heights(axes[0]), np.array([9, 4, 1]) / 14 * 100)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.6428571428571428 (ACTUAL), 64.28571428571429 (DESIRED)\nE [1]: 0.2857142857142857 (ACTUAL), 28.57142857142857 (DESIRED)\nE [2]: 0.07142857142857142 (ACTUAL), 7.142857142857142 (DESIRED)\nE Max absolute difference among violations: 63.64285714\nE Max relative difference among violations: 0.99\nE ACTUAL: array([0.642857, 0.285714, 0.071429])\nE DESIRED: array([64.285714, 28.571429, 7.142857])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______________ test_real_pca_variance_and_reconstruction_energy _______________\ntests\\test_dimred_visualizer.py:117: in test_real_pca_variance_and_reconstruction_energy\n assert_allclose(heights(axes[0]), np.array([9, 4, 1]) / 14 * 100)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.6428571428571428 (ACTUAL), 64.28571428571429 (DESIRED)\nE [1]: 0.2857142857142857 (ACTUAL), 28.57142857142857 (DESIRED)\nE [2]: 0.07142857142857142 (ACTUAL), 7.142857142857142 (DESIRED)\nE Max absolute difference among violations: 63.64285714\nE Max relative difference among violations: 0.99\nE ACTUAL: array([0.642857, 0.285714, 0.071429])\nE DESIRED: array([64.285714, 28.571429, 7.142857])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_pca_variance_and_reconstruction_energy\n1 failed, 59 deselected in 2.62s\n", + "stderr": "" + } + }, + { + "name": "M03_best_is_max", + "method": "plot_training_history", + "selection": "training_history_minimum", + "changed_lines": [ + 1048 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "be86a4cc9d42b00927f9f7478ce5938b3f78e432208053698595573184c30360", + "patch": "--- \n+++ \n@@ -1045,7 +1045,7 @@\n ax.plot(epochs, train_loss, color=\"#4C72B0\", lw=2, label=\"Train\")\n ax.plot(epochs, val_loss, color=\"#DD8452\", lw=2, ls=\"--\", label=\"Validation\")\n # Best epoch d\u00e9fini sur la val_loss minimale (crit\u00e8re de s\u00e9lection mod\u00e8le).\n- best_epoch = int(np.argmin(val_loss)) + 1\n+ best_epoch = int(np.argmax(val_loss)) + 1\n best_val = min(val_loss)\n ax.axvline(\n best_epoch,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "training_history_minimum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n2 passed, 58 deselected in 1.25s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "training_history_minimum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:238: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:238: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n____ test_training_history_minimum_is_not_last_and_distinct_series[False] _____\ntests\\test_dimred_visualizer.py:238: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])\n_____ test_training_history_minimum_is_not_last_and_distinct_series[True] _____\ntests\\test_dimred_visualizer.py:238: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_training_history_minimum_is_not_last_and_distinct_series[False]\nFAILED tests/test_dimred_visualizer.py::test_training_history_minimum_is_not_last_and_distinct_series[True]\n2 failed, 58 deselected in 1.44s\n", + "stderr": "" + } + }, + { + "name": "M04_family_median", + "method": "plot_ae_error_by_family", + "selection": "error_family_mean", + "changed_lines": [ + 2740, + 2742 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "0c1e0f746f1208318c3a41311cf26ca2247439221e86b8fb26a7f94c2d6ca839", + "patch": "--- \n+++ \n@@ -2739,7 +2739,7 @@\n # Agr\u00e9gation par famille pour r\u00e9sum\u00e9 interpr\u00e9table.\n df_fam = (\n df_feat_mse.groupby(\"family\")[\"mse\"]\n- .agg([\"mean\", \"std\", \"count\"])\n+ .agg([\"median\", \"std\", \"count\"]).rename(columns={\"median\": \"mean\"})\n .rename(columns={\"mean\": \"mse_mean\", \"std\": \"mse_std\", \"count\": \"n_feats\"})\n .reset_index()\n .sort_values(\"mse_mean\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "error_family_mean", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n1 passed, 59 deselected in 0.78s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "error_family_mean", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:313: in test_error_family_mean_is_feature_weighted_and_std_is_between_features\n assert_allclose(widths(axes[0]), [2.5, 50 / 3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 2 (50%)\nE Mismatch at index:\nE [1]: 16.0 (ACTUAL), 16.666666666666668 (DESIRED)\nE Max absolute difference among violations: 0.66666667\nE Max relative difference among violations: 0.04\nE ACTUAL: array([ 2.5, 16. ])\nE DESIRED: array([ 2.5 , 16.666667])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n___ test_error_family_mean_is_feature_weighted_and_std_is_between_features ____\ntests\\test_dimred_visualizer.py:313: in test_error_family_mean_is_feature_weighted_and_std_is_between_features\n assert_allclose(widths(axes[0]), [2.5, 50 / 3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 2 (50%)\nE Mismatch at index:\nE [1]: 16.0 (ACTUAL), 16.666666666666668 (DESIRED)\nE Max absolute difference among violations: 0.66666667\nE Max relative difference among violations: 0.04\nE ACTUAL: array([ 2.5, 16. ])\nE DESIRED: array([ 2.5 , 16.666667])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_error_family_mean_is_feature_weighted_and_std_is_between_features\n1 failed, 59 deselected in 0.92s\n", + "stderr": "" + } + }, + { + "name": "M05_ae_as_pca", + "method": "plot_ae_vs_pca", + "selection": "ae_pca_comparison", + "changed_lines": [ + 1235, + 1236 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "4490d68bd49df52e8e3e33fcd3f3deb6afafc15b43d98456789b3a77da97d69c", + "patch": "--- \n+++ \n@@ -1233,7 +1233,7 @@\n for _, row in ae_df.iterrows():\n # Chaque AE est repr\u00e9sent\u00e9 par une ligne horizontale de performance.\n ax.axhline(\n- row[\"mse_mean\"], color=\"#DD8452\", ls=\"--\", lw=2, label=row[\"method\"]\n+ pca_df[\"mse_mean\"].iloc[0], color=\"#DD8452\", ls=\"--\", lw=2, label=row[\"method\"]\n )\n ax.annotate(\n # Position d'annotation choisie pour rester lisible sur la courbe PCA.\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "ae_pca_comparison", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n1 passed, 59 deselected in 0.71s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "ae_pca_comparison", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:273: in test_ae_pca_comparison_does_not_substitute_metrics\n assert_allclose(ax.lines[1].get_ydata(), [0.17, 0.17])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE [1]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE Max absolute difference among violations: 0.73\nE Max relative difference among violations: 4.29411765\nE ACTUAL: array([0.9, 0.9])\nE DESIRED: array([0.17, 0.17])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_____________ test_ae_pca_comparison_does_not_substitute_metrics ______________\ntests\\test_dimred_visualizer.py:273: in test_ae_pca_comparison_does_not_substitute_metrics\n assert_allclose(ax.lines[1].get_ydata(), [0.17, 0.17])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE [1]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE Max absolute difference among violations: 0.73\nE Max relative difference among violations: 4.29411765\nE ACTUAL: array([0.9, 0.9])\nE DESIRED: array([0.17, 0.17])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_ae_pca_comparison_does_not_substitute_metrics\n1 failed, 59 deselected in 0.88s\n", + "stderr": "" + } + }, + { + "name": "M06_identity_reconstruction", + "method": "plot_ae_reconstruction", + "selection": "reconstruction_drawn_rows", + "changed_lines": [ + 1182 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "9d374b178f5f5ea7f05df0b08d34b31f12680c59bb26223a5818b649832fa9f4", + "patch": "--- \n+++ \n@@ -1179,7 +1179,7 @@\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n- recon = X_recon[si]\n+ recon = X[si]\n mse_i = float(np.mean((orig - recon) ** 2))\n ax.plot(x_pos, orig, color=\"#4C72B0\", lw=1.5, alpha=0.9, label=\"Original\")\n ax.plot(\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n3 passed, 57 deselected in 1.23s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:254: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 11.0 (ACTUAL), 12.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 4.0 (DESIRED)\nE Max absolute difference among violations: 2.\nE Max relative difference among violations: 0.5\nE ACTUAL: array([11., 2.])\nE DESIRED: array([12., 4.])" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:254: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 25.0 (DESIRED)\nE [1]: 43.0 (ACTUAL), 55.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.24\nE ACTUAL: array([19., 43.])\nE DESIRED: array([25., 55.])" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:254: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 3.0 (ACTUAL), 5.0 (DESIRED)\nE [1]: 17.0 (ACTUAL), 21.0 (DESIRED)\nE Max absolute difference among violations: 4.\nE Max relative difference among violations: 0.4\nE ACTUAL: array([ 3., 17.])\nE DESIRED: array([ 5., 21.])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFF [100%]\n================================== FAILURES ===================================\n______________ test_reconstruction_drawn_rows_and_manual_mse[1] _______________\ntests\\test_dimred_visualizer.py:254: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 11.0 (ACTUAL), 12.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 4.0 (DESIRED)\nE Max absolute difference among violations: 2.\nE Max relative difference among violations: 0.5\nE ACTUAL: array([11., 2.])\nE DESIRED: array([12., 4.])\n______________ test_reconstruction_drawn_rows_and_manual_mse[3] _______________\ntests\\test_dimred_visualizer.py:254: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 25.0 (DESIRED)\nE [1]: 43.0 (ACTUAL), 55.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.24\nE ACTUAL: array([19., 43.])\nE DESIRED: array([25., 55.])\n______________ test_reconstruction_drawn_rows_and_manual_mse[6] _______________\ntests\\test_dimred_visualizer.py:254: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 3.0 (ACTUAL), 5.0 (DESIRED)\nE [1]: 17.0 (ACTUAL), 21.0 (DESIRED)\nE Max absolute difference among violations: 4.\nE Max relative difference among violations: 0.4\nE ACTUAL: array([ 3., 17.])\nE DESIRED: array([ 5., 21.])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_reconstruction_drawn_rows_and_manual_mse[1]\nFAILED tests/test_dimred_visualizer.py::test_reconstruction_drawn_rows_and_manual_mse[3]\nFAILED tests/test_dimred_visualizer.py::test_reconstruction_drawn_rows_and_manual_mse[6]\n3 failed, 57 deselected in 1.43s\n", + "stderr": "" + } + }, + { + "name": "M07_hr_color_roll", + "method": "plot_hr_diagram_embedding", + "selection": "hr_finite_triplets", + "changed_lines": [ + 920, + 923 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "9747542c8f796dcfe2334714186a9d2f1f6a2e0de7604ec1c1feb5eddbce86b4", + "patch": "--- \n+++ \n@@ -920,7 +920,7 @@\n sc = ax.scatter(\n teff[valid],\n logg[valid],\n- c=z_coord[valid],\n+ c=np.roll(z_coord[valid], 1),\n cmap=self.cmap_continuous,\n s=2,\n alpha=0.5,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "hr_finite_triplets", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 907, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n2 passed, 58 deselected in 1.12s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "hr_finite_triplets", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:97: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 11.0 (DESIRED)\nE [1]: 11.0 (ACTUAL), 23.0 (DESIRED)\nE [2]: 23.0 (ACTUAL), 19.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.72727273\nE ACTUAL: MaskedArray([19., 11., 23.])\nE DESIRED: array([11., 23., 19.])" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:97: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 43.0 (ACTUAL), 2.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 5.0 (DESIRED)\nE [2]: 5.0 (ACTUAL), 43.0 (DESIRED)\nE Max absolute difference among violations: 41.\nE Max relative difference among violations: 20.5\nE ACTUAL: MaskedArray([43., 2., 5.])\nE DESIRED: array([ 2., 5., 43.])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 907, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________________ test_hr_finite_triplets_and_physical_axes[0] _________________\ntests\\test_dimred_visualizer.py:97: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 11.0 (DESIRED)\nE [1]: 11.0 (ACTUAL), 23.0 (DESIRED)\nE [2]: 23.0 (ACTUAL), 19.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.72727273\nE ACTUAL: MaskedArray([19., 11., 23.])\nE DESIRED: array([11., 23., 19.])\n________________ test_hr_finite_triplets_and_physical_axes[1] _________________\ntests\\test_dimred_visualizer.py:97: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 43.0 (ACTUAL), 2.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 5.0 (DESIRED)\nE [2]: 5.0 (ACTUAL), 43.0 (DESIRED)\nE Max absolute difference among violations: 41.\nE Max relative difference among violations: 20.5\nE ACTUAL: MaskedArray([43., 2., 5.])\nE DESIRED: array([ 2., 5., 43.])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_hr_finite_triplets_and_physical_axes[0]\nFAILED tests/test_dimred_visualizer.py::test_hr_finite_triplets_and_physical_axes[1]\n2 failed, 58 deselected in 1.25s\n", + "stderr": "" + } + }, + { + "name": "M08_cluster_colors", + "method": "plot_hdbscan_clusters", + "selection": "real_analyzer_state", + "changed_lines": [ + 1390, + 1393 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "4c7322cb7de655cb5ea317a71b8cec2ec4de336c2e1866b9f78c378a3ae00a1b", + "patch": "--- \n+++ \n@@ -1390,7 +1390,7 @@\n ax.scatter(\n Z[mask, 0],\n Z[mask, 1],\n- c=[color_map[cid]],\n+ c=[color_map[cluster_ids[-1]]],\n s=2,\n alpha=0.75,\n rasterized=True,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n3 passed, 57 deselected in 1.16s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:397: in test_hdbscan_real_analyzer_state_and_point_populations\n assert_allclose(sc.get_facecolors()[0, :3], hdb.color_map_[cid][:3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F.. [100%]\n================================== FAILURES ===================================\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels0] _______\ntests\\test_dimred_visualizer.py:397: in test_hdbscan_real_analyzer_state_and_point_populations\n assert_allclose(sc.get_facecolors()[0, :3], hdb.color_map_[cid][:3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels0]\n1 failed, 2 passed, 57 deselected in 1.31s\n", + "stderr": "" + } + }, + { + "name": "M09_tsne_as_umap", + "method": "plot_trustworthiness", + "selection": "real_sklearn_trustworthiness", + "changed_lines": [ + 2244 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "219f76a998ddc435edb3c68374e089462acdda0d735e2384192c4c04d16aab75", + "patch": "--- \n+++ \n@@ -2241,7 +2241,7 @@\n with warnings.catch_warnings():\n warnings.simplefilter(\"ignore\")\n tu = trustworthiness(X_sub, Zu_sub, n_neighbors=k, metric=\"euclidean\")\n- tt = trustworthiness(X_sub, Zt_sub, n_neighbors=k, metric=\"euclidean\")\n+ tt = trustworthiness(X_sub, Zu_sub, n_neighbors=k, metric=\"euclidean\")\n # Stocke T(k) pour les deux m\u00e9thodes afin de tracer la courbe comparative.\n trust_u.append(tu)\n trust_t.append(tt)\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n2 passed, 58 deselected in 2.60s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 24 / 24 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -1.14005850694597 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 0.8518760376374508 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: -0.9468537822225308 (ACTUAL), -0.6451940968015629 (DESIRED)\nE [1, 1]: -0.2999476978380483 (ACTUAL), 0.0825255266666682 (DESIRED)\nE [2, 0]: 0.7540394717615756 (ACTUAL), -0.11873997633083841 (DESIRED)\nE Max absolute difference among violations: 3.39499489\nE Max relative difference among violations: 13.23342732\nE ACTUAL: array([[-1.140059, 0.851876],\nE [-0.946854, -0.299948],\nE [ 0.754039, 1.994789],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-0.645194, 0.082526],\nE [-0.11874 , -1.400206],..." + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 18 / 18 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -1.14005850694597 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 0.8518760376374508 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: -1.215555026777933 (ACTUAL), -1.0861640144823521 (DESIRED)\nE [1, 1]: 0.13882201829008786 (ACTUAL), -0.5693158913378338 (DESIRED)\nE [2, 0]: -0.13429338949088465 (ACTUAL), -1.215555026777933 (DESIRED)\nE Max absolute difference among violations: 3.39499489\nE Max relative difference among violations: 7.48292869\nE ACTUAL: array([[-1.140059, 0.851876],\nE [-1.215555, 0.138822],\nE [-0.134293, 1.177617],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-1.086164, -0.569316],\nE [-1.215555, 0.138822],..." + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[12] ________\ntests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 24 / 24 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -1.14005850694597 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 0.8518760376374508 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: -0.9468537822225308 (ACTUAL), -0.6451940968015629 (DESIRED)\nE [1, 1]: -0.2999476978380483 (ACTUAL), 0.0825255266666682 (DESIRED)\nE [2, 0]: 0.7540394717615756 (ACTUAL), -0.11873997633083841 (DESIRED)\nE Max absolute difference among violations: 3.39499489\nE Max relative difference among violations: 13.23342732\nE ACTUAL: array([[-1.140059, 0.851876],\nE [-0.946854, -0.299948],\nE [ 0.754039, 1.994789],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-0.645194, 0.082526],\nE [-0.11874 , -1.400206],...\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[9] _________\ntests\\test_dimred_visualizer.py:590: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 18 / 18 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -1.14005850694597 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 0.8518760376374508 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: -1.215555026777933 (ACTUAL), -1.0861640144823521 (DESIRED)\nE [1, 1]: 0.13882201829008786 (ACTUAL), -0.5693158913378338 (DESIRED)\nE [2, 0]: -0.13429338949088465 (ACTUAL), -1.215555026777933 (DESIRED)\nE Max absolute difference among violations: 3.39499489\nE Max relative difference among violations: 7.48292869\nE ACTUAL: array([[-1.140059, 0.851876],\nE [-1.215555, 0.138822],\nE [-0.134293, 1.177617],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-1.086164, -0.569316],\nE [-1.215555, 0.138822],...\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[12]\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[9]\n2 failed, 58 deselected in 3.09s\n", + "stderr": "" + } + }, + { + "name": "M10_confidence_constant", + "method": "plot_xgboost_umap", + "selection": "xgboost_classes_confidence", + "changed_lines": [ + 2095, + 2098 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "f1bb69629105b2443c7a96086390fc68bde21d1e395b2ea7129ac0dae024f231", + "patch": "--- \n+++ \n@@ -2095,7 +2095,7 @@\n sc = ax.scatter(\n Z_umap_aligned[:, 0],\n Z_umap_aligned[:, 1],\n- c=confidence,\n+ c=np.ones(len(confidence)),\n cmap=\"RdYlGn\",\n vmin=0.4,\n vmax=1.0,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n2 passed, 58 deselected in 1.01s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:518: in test_xgboost_classes_confidence_and_cluster_associations\n assert_array_equal(axes[1].collections[0].get_array(), confidence)\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 6 / 6 (100%)\nE First 5 mismatches are at indices:\nE [0]: 1.0 (ACTUAL), 0.45 (DESIRED)\nE [1]: 1.0 (ACTUAL), 0.7 (DESIRED)\nE [2]: 1.0 (ACTUAL), 0.95 (DESIRED)\nE [3]: 1.0 (ACTUAL), 0.6 (DESIRED)\nE [4]: 1.0 (ACTUAL), 0.8 (DESIRED)\nE Max absolute difference among violations: 0.55\nE Max relative difference among violations: 1.22222222\nE ACTUAL: MaskedArray([1., 1., 1., 1., 1., 1.])\nE DESIRED: array([0.45, 0.7 , 0.95, 0.6 , 0.8 , 0.5 ])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".F [100%]\n================================== FAILURES ===================================\n____ test_xgboost_classes_confidence_and_cluster_associations[confidence1] ____\ntests\\test_dimred_visualizer.py:518: in test_xgboost_classes_confidence_and_cluster_associations\n assert_array_equal(axes[1].collections[0].get_array(), confidence)\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 6 / 6 (100%)\nE First 5 mismatches are at indices:\nE [0]: 1.0 (ACTUAL), 0.45 (DESIRED)\nE [1]: 1.0 (ACTUAL), 0.7 (DESIRED)\nE [2]: 1.0 (ACTUAL), 0.95 (DESIRED)\nE [3]: 1.0 (ACTUAL), 0.6 (DESIRED)\nE [4]: 1.0 (ACTUAL), 0.8 (DESIRED)\nE Max absolute difference among violations: 0.55\nE Max relative difference among violations: 1.22222222\nE ACTUAL: MaskedArray([1., 1., 1., 1., 1., 1.])\nE DESIRED: array([0.45, 0.7 , 0.95, 0.6 , 0.8 , 0.5 ])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_xgboost_classes_confidence_and_cluster_associations[confidence1]\n1 failed, 1 passed, 58 deselected in 1.21s\n", + "stderr": "" + } + }, + { + "name": "M11_synthesis_ae_as_pca", + "method": "plot_synthesis_grid", + "selection": "synthesis_preserves", + "changed_lines": [ + 2887 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "4f007fdb7dcae0839188918aad4eb9f77662409d9c1413989ff8d3ddeed36082", + "patch": "--- \n+++ \n@@ -2884,7 +2884,7 @@\n if Z_umap is not None:\n # UMAP est optionnel selon le notebook ex\u00e9cut\u00e9.\n METHODS.append((\"UMAP\", Z_umap, \"UMAP 1\", \"UMAP 2\"))\n- METHODS.append((\"Autoencodeur\", Z_ae, \"Latent 1\", \"Latent 2\"))\n+ METHODS.append((\"Autoencodeur\", scores_pca, \"Latent 1\", \"Latent 2\"))\n \n PARAMS = [\n (\"Classe spectrale\", None, None),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n2 passed, 58 deselected in 1.01s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:658: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:658: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[False] ___\ntests\\test_dimred_visualizer.py:658: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[True] ____\ntests\\test_dimred_visualizer.py:658: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]\n2 failed, 58 deselected in 1.14s\n", + "stderr": "" + } + }, + { + "name": "M12_stability_median", + "method": "plot_stability", + "selection": "stability_producer", + "changed_lines": [ + 740, + 744 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "c521e47969b0df802a97ecf521f45fca1a471bac3804187362b0ac01038a728f", + "patch": "--- \n+++ \n@@ -741,7 +741,7 @@\n 0.98,\n 0.97,\n # Convention actuelle: on exclut souvent seed de r\u00e9f\u00e9rence (index 0) de la moyenne.\n- f\"Moyenne : {dists[1:].mean():.4f}\" if len(dists) > 1 else \"\",\n+ f\"Moyenne : {np.median(dists[1:]):.4f}\" if len(dists) > 1 else \"\",\n transform=ax.transAxes,\n ha=\"right\",\n va=\"top\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "stability_producer", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n1 passed, 59 deselected in 1.14s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "stability_producer", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:632: in test_stability_producer_order_and_mean_without_reference\n assert f\"{expected:.4f}\" in text(ax)\nE assert '0.0120' in 'Moyenne : 0.0057'\nE + where 'Moyenne : 0.0057' = text()" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n__________ test_stability_producer_order_and_mean_without_reference ___________\ntests\\test_dimred_visualizer.py:632: in test_stability_producer_order_and_mean_without_reference\n assert f\"{expected:.4f}\" in text(ax)\nE assert '0.0120' in 'Moyenne : 0.0057'\nE + where 'Moyenne : 0.0057' = text()\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_stability_producer_order_and_mean_without_reference\n1 failed, 59 deselected in 1.26s\n", + "stderr": "" + } + }, + { + "name": "M13_profile_sign_erased", + "method": "plot_hdbscan_feature_profiles", + "selection": "profiles_signed_top", + "changed_lines": [ + 2026 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "91e32e38df5eeff868d93e08f22bde30dfd975fd423fe2b1a239a738d636a7cc", + "patch": "--- \n+++ \n@@ -2023,7 +2023,7 @@\n profile = cluster_means.loc[cid]\n # Top-5 par amplitude absolue (exc\u00e8s ou d\u00e9ficit).\n top5 = profile.abs().nlargest(5).index.tolist()\n- vals = profile[top5].values\n+ vals = np.abs(profile[top5].values)\n colors = [\"#C0392B\" if v > 0 else \"#2980B9\" for v in vals]\n labels = [\n f.replace(\"feature_\", \"\").replace(\"_eq_width\", \"\\nEW\")[:14]\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "profiles_signed_top", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n1 passed, 59 deselected in 0.82s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "profiles_signed_top", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:489: in test_cluster_profiles_signed_top_five_not_first_five\n assert_allclose(widths(axes[0]), [2, 0.9, -0.6, 0.4, -0.1])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 5 (40%)\nE Mismatch at indices:\nE [2]: 0.6 (ACTUAL), -0.6 (DESIRED)\nE [4]: 0.1 (ACTUAL), -0.1 (DESIRED)\nE Max absolute difference among violations: 1.2\nE Max relative difference among violations: 2.\nE ACTUAL: array([2. , 0.9, 0.6, 0.4, 0.1])\nE DESIRED: array([ 2. , 0.9, -0.6, 0.4, -0.1])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_cluster_profiles_signed_top_five_not_first_five _____________\ntests\\test_dimred_visualizer.py:489: in test_cluster_profiles_signed_top_five_not_first_five\n assert_allclose(widths(axes[0]), [2, 0.9, -0.6, 0.4, -0.1])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 5 (40%)\nE Mismatch at indices:\nE [2]: 0.6 (ACTUAL), -0.6 (DESIRED)\nE [4]: 0.1 (ACTUAL), -0.1 (DESIRED)\nE Max absolute difference among violations: 1.2\nE Max relative difference among violations: 2.\nE ACTUAL: array([2. , 0.9, 0.6, 0.4, 0.1])\nE DESIRED: array([ 2. , 0.9, -0.6, 0.4, -0.1])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_cluster_profiles_signed_top_five_not_first_five\n1 failed, 59 deselected in 0.91s\n", + "stderr": "" + } + }, + { + "name": "M14_density_wrong_population", + "method": "plot_ae_error_distribution", + "selection": "histogram_densities", + "changed_lines": [ + 1324, + 1329 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "d5407d955fea773baff307002def63203823044aaeb4696dac2eed4d256b0523", + "patch": "--- \n+++ \n@@ -1326,7 +1326,7 @@\n bins=60,\n alpha=0.55,\n color=color,\n- density=True,\n+ density=False,\n label=f\"{cls} (n={mask.sum()}, \u03bc={vals.mean():.4f})\",\n )\n # M\u00e9diane trac\u00e9e pour robuste comparaison inter-classes.\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "histogram_densities", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n1 passed, 59 deselected in 1.55s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "histogram_densities", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:355: in test_histogram_densities_integrate_and_class_mean_median_are_distinct\n assert_allclose(sum(p.get_width() * p.get_height() for p in container), 1)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98333333\nE Max relative difference among violations: 0.98333333\nE ACTUAL: array(0.016667)\nE DESIRED: array(1)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____ test_histogram_densities_integrate_and_class_mean_median_are_distinct ____\ntests\\test_dimred_visualizer.py:355: in test_histogram_densities_integrate_and_class_mean_median_are_distinct\n assert_allclose(sum(p.get_width() * p.get_height() for p in container), 1)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98333333\nE Max relative difference among violations: 0.98333333\nE ACTUAL: array(0.016667)\nE DESIRED: array(1)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_histogram_densities_integrate_and_class_mean_median_are_distinct\n1 failed, 59 deselected in 1.03s\n", + "stderr": "" + } + }, + { + "name": "M15_kde_wrong_population", + "method": "plot_latent_kde", + "selection": "real_kde_reproducible", + "changed_lines": [ + 2401 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "91bfc71fabb5fb950157bfc2ac827c4aab3d866ca76c10d44bbf20516aa17911", + "patch": "--- \n+++ \n@@ -2398,7 +2398,7 @@\n from scipy.stats import gaussian_kde\n \n # KDE restreint \u00e0 la population stellaire pour une lecture astrophysique propre.\n- star_mask = y == \"STAR\"\n+ star_mask = np.ones(len(y), dtype=bool)\n Z_stars = Z_ae[star_mask]\n teff_s = (\n meta[\"teff_gspphot\"].values[star_mask].astype(float)\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n1 passed, 59 deselected in 2.37s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:727: in test_real_kde_reproducible_star_selection_and_observation_colors\n assert len(actual) == 119\nE assert 139 == 119\nE + where 139 = len(array([[ 1.46143263e+00, 5.04194549e-01],\\n [-1.58198440e-01, -4.02871589e-01],\\n [-5.12655840e-01, 8.0166....62051618e-01, -1.22073795e+00],\\n [-2.43641605e-01, -8.00208551e-01],\\n [-1.00969481e+00, 6.69136452e-01]]))" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_real_kde_reproducible_star_selection_and_observation_colors _______\ntests\\test_dimred_visualizer.py:727: in test_real_kde_reproducible_star_selection_and_observation_colors\n assert len(actual) == 119\nE assert 139 == 119\nE + where 139 = len(array([[ 1.46143263e+00, 5.04194549e-01],\\n [-1.58198440e-01, -4.02871589e-01],\\n [-5.12655840e-01, 8.0166....62051618e-01, -1.22073795e+00],\\n [-2.43641605e-01, -8.00208551e-01],\\n [-1.00969481e+00, 6.69136452e-01]]))\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_kde_reproducible_star_selection_and_observation_colors\n1 failed, 59 deselected in 2.35s\n", + "stderr": "" + } + }, + { + "name": "M16_export_blank_figure", + "method": "_save", + "selection": "real_export_readable", + "changed_lines": [ + 1018 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "c686947be404c32bf911a0cff410356af8ec385c229db14da4dc8ed8823359f1", + "patch": "--- \n+++ \n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ plt.figure().savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n2 passed, 58 deselected in 1.28s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:680: in test_real_export_readable_and_same_semantic_figure\n assert pixels.shape[0] > 100 and pixels.std() > 1\nE assert (250 > 100 and np.float64(0.0) > 1)\nE + where np.float64(0.0) = ()\nE + where = array([[[255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255],\\n ...,\\n [255, 255, 255],\\n ... ...,\\n [255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255]]], shape=(250, 330, 3), dtype=uint8).std" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F. [100%]\n================================== FAILURES ===================================\n___________ test_real_export_readable_and_same_semantic_figure[png] ___________\ntests\\test_dimred_visualizer.py:680: in test_real_export_readable_and_same_semantic_figure\n assert pixels.shape[0] > 100 and pixels.std() > 1\nE assert (250 > 100 and np.float64(0.0) > 1)\nE + where np.float64(0.0) = ()\nE + where = array([[[255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255],\\n ...,\\n [255, 255, 255],\\n ... ...,\\n [255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255]]], shape=(250, 330, 3), dtype=uint8).std\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_export_readable_and_same_semantic_figure[png]\n1 failed, 1 passed, 58 deselected in 1.11s\n", + "stderr": "" + } + } + ], + "executed_files_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7fd6d4164a9bd50a52e3a47e79eef197c7963dcc6cd5e96be4231383e7ca3a25", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/proofs_dimred_visualizer.py": "2977b9033b086f26b611f8e3e3d1f8357fd8846142ad39c1be7d0b512bff9e4e", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3" + }, + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "............................................................ [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-tb2ov1q6\\result.xml -\n60 passed in 17.50s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_review_old_archive_integrity_results.json b/audit/m28_review_old_archive_integrity_results.json new file mode 100644 index 0000000..5bc5e4f --- /dev/null +++ b/audit/m28_review_old_archive_integrity_results.json @@ -0,0 +1,1223 @@ +{ + "active_head": "0c06cfd497579c5f99fd957c97ca28a052494bd4", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6" + }, + "mode": "baseline", + "runs": [], + "proofs_ref": "ed1d91ec0efb619aeb77a5bf7e4a0ab43fa84cac", + "executed_files_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "99edf78cd1fc7a256435cf809470f76d8bef0460c674f2a5d650795e3e00deb6", + "tests/conftest.py": "73cbe56d283c68000626bb0de2bc9821a86ade182259648806222f4aaecdd99d", + "tests/proofs_dimred_visualizer.py": "05beb617478fa7d3d4d341381f83b638ba95895c6b8b73f7e0592ea50d6faf06" + }, + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[real_scipy]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930403 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768764 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561349 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.952830879078075 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:130: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:140: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000023B2D15C2E0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:140: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000023B2D36E5E0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:160: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:198: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:198: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:212: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x0000023B2D4112A0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:224: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:227: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:225: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:227: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:245: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:244: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:253: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:264: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:280: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and explained mass disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:293: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x0000023B2CB43920>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:311: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:335: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1486/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:335: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1486/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:346: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:356: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:361: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1199, + 1200, + 1201, + 1202, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FFFFFFFFFFFF.FFFFFFFFF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[real_scipy] ________\ntests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9999010312784165 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9982625849965366 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.9568989950930403 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.276899\nE Max relative difference among violations: 0.4072044\nE ACTUAL: array([0.999901, 0.998263, 0.956899])\nE DESIRED: array([0.99, 0.95, 0.68])\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:116: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.006\nE Density-height percentiles are not probability masses\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.9978957033768764 (ACTUAL), 0.99 (DESIRED)\nE [1]: 0.9938806950561349 (ACTUAL), 0.95 (DESIRED)\nE [2]: 0.952830879078075 (ACTUAL), 0.68 (DESIRED)\nE Max absolute difference among violations: 0.27283088\nE Max relative difference among violations: 0.40122188\nE ACTUAL: array([0.997896, 0.993881, 0.952831])\nE DESIRED: array([0.99, 0.95, 0.68])\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:130: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.406625) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(4.990875)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:140: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000023B2D15C2E0>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:140: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: DiagrammedeHertzsprung-Russell\nE LAMOSTDR5$\\times$GaiaDR3\u00b743019\u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000023B2D36E5E0>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:160: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:198: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:198: in test_cluster_colorbar_matches_actual_cluster_rgb\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Colorbar does not encode C2\nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:212: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x0000023B2D4112A0>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:224: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:227: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:225: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:227: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:245: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:244: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:253: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:264: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Unpopulated reconstruction panel\nE assert ( or not True or not True)\nE + where = .lines\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:280: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and explained mass disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:293: in test_log_histogram_keeps_small_positive_errors\n assert (\nE AssertionError: Positive MSEs dropped below arbitrary 1e-4 floor\nE assert np.float64(0.0001) <= np.float64(1e-08)\nE + where np.float64(0.0001) = min(. at 0x0000023B2CB43920>)\nE + and np.float64(1e-08) = ()\nE + where = array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]).min\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:311: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:335: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1486/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:335: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1486/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:346: in test_trustworthiness_axis_contains_computed_values\n assert np.all((vals >= lo) & (vals <= hi)), (vals, (lo, hi))\nE AssertionError: (array([1. , 1. , 1. , 0.5 , 0.55882353,\nE 0.50396825]), (np.float64(0.75), np.float64(1.01)))\nE assert np.False_\nE + where np.False_ = ((array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) >= np.float64(0.75) & array([1. , 1. , 1. , 0.5 , 0.55882353,\\n 0.50396825]) <= np.float64(1.01)))\nE + where = np.all\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:356: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:361: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-anbku75j\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[real_scipy]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\n21 failed, 1 passed in 11.31s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_review_order_results.json b/audit/m28_review_order_results.json new file mode 100644 index 0000000..e01dbdf --- /dev/null +++ b/audit/m28_review_order_results.json @@ -0,0 +1,87 @@ +{ + "active_head": "0c06cfd497579c5f99fd957c97ca28a052494bd4", + "commands": [ + { + "mode": "reverse", + "seed": 7, + "plugin": "def pytest_collection_modifyitems(items):\n items.reverse()\n", + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "-p", + "m28_order" + ], + "exit_code": 0, + "stdout": "........................................................................ [ 10%]\n........................................................................ [ 20%]\n........................................................................ [ 31%]\n........................................................................ [ 41%]\n........................................................................ [ 52%]\n........................................................................ [ 62%]\n........................................................................ [ 72%]\n........................................................................ [ 83%]\n........................................................................ [ 93%]\n............................................ [100%]\n============================== warnings summary ===============================\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_transient_failure_retries_then_succeeds\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_retry_limit_raises_or_falls_back_by_mode\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_cone_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_bulk_without_matches_stops_auto_fallback\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_partial_esa_supplement_merges_without_losing_xmatch_rows\n C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\tools\\gaia_crossmatcher.py:1210: Pandas4Warning: The inplace keyword in DataFrame.drop is deprecated and will be removed in a future version (PDEP-8).\n See https://pandas.pydata.org/docs/dev/whatsnew/v3.1.0.html#deprecation-inplace for more details.\n df_merged.drop(columns=[\"objid\"], inplace=True, errors=\"ignore\")\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n692 passed, 62 deselected, 7 warnings in 22.53s\n", + "stderr": "" + }, + { + "mode": "shuffle", + "seed": 3, + "plugin": "import random\ndef pytest_collection_modifyitems(items):\n random.Random(3).shuffle(items)\n", + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "-p", + "m28_order", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-W", + "error" + ], + "exit_code": 0, + "stdout": "............................................................ [100%]\n60 passed in 8.15s\n", + "stderr": "" + }, + { + "mode": "shuffle", + "seed": 11, + "plugin": "import random\ndef pytest_collection_modifyitems(items):\n random.Random(11).shuffle(items)\n", + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "-p", + "m28_order", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-W", + "error" + ], + "exit_code": 0, + "stdout": "............................................................ [100%]\n60 passed in 7.88s\n", + "stderr": "" + }, + { + "mode": "shuffle", + "seed": 29, + "plugin": "import random\ndef pytest_collection_modifyitems(items):\n random.Random(29).shuffle(items)\n", + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "-p", + "m28_order", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-W", + "error" + ], + "exit_code": 0, + "stdout": "............................................................ [100%]\n60 passed in 8.06s\n", + "stderr": "" + } + ], + "hashes": { + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d" + } +} diff --git a/audit/m28_review_original_controls_final_results.json b/audit/m28_review_original_controls_final_results.json new file mode 100644 index 0000000..df83e0d --- /dev/null +++ b/audit/m28_review_original_controls_final_results.json @@ -0,0 +1,9944 @@ +{ + "active_head": "0c06cfd497579c5f99fd957c97ca28a052494bd4", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6" + }, + "mode": "proofs", + "runs": [ + { + "name": "C14_renderable_mathtext", + "method": "plot_eigenspectra", + "selection": "default_eigenspectrum", + "changed_lines": [ + 869, + 872 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "b3ea1715d05ad316ba907994cf51f603855f85e89009b7cc151e980a76481c6f", + "patch": "--- \n+++ \n@@ -869,7 +869,7 @@\n ax.text(\n lam,\n ymax * 0.88,\n- nom,\n+ nom.replace(chr(92)*2, chr(92)),\n rotation=90,\n fontsize=6,\n color=\"crimson\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_eigenspectrum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:432: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:437: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:432: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:437: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\n1 failed, 85 deselected in 1.94s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_eigenspectrum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n1 passed, 85 deselected in 1.02s\n", + "stderr": "" + } + }, + { + "name": "C01_equivalent_percent", + "method": "plot_variance_explained", + "selection": "real_pca_variance", + "changed_lines": [ + 154 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "8b74921a093af4f83f08890f592c4c0952217b3b46be509081ed8d56a050a69e", + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, 100 * ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n1 passed, 85 deselected in 3.02s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n1 passed, 85 deselected in 2.84s\n", + "stderr": "" + } + }, + { + "name": "C02_alternative_export", + "method": "_save", + "selection": "real_export_readable", + "changed_lines": [ + 1018 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "95ac85f7fbb81f0932ea60d4962a8d00b3eae4d5c2b4148589e17266f2a9d953", + "patch": "--- \n+++ \n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ fig.canvas.print_figure(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n2 passed, 84 deselected in 1.22s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n2 passed, 84 deselected in 1.20s\n", + "stderr": "" + } + }, + { + "name": "C03_alternative_palette", + "method": "plot_loadings_bar", + "selection": "signed_loadings", + "changed_lines": [ + 288 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c8833a129a116501b3ba962a48791953da763ac97fcf1c87d41ade0e8e6994f4", + "patch": "--- \n+++ \n@@ -285,7 +285,7 @@\n df = df.sort_values(\"loading\")\n \n # Couleur encodant le signe physique de la contribution.\n- colors = [\"#DD8452\" if v < 0 else \"#4C72B0\" for v in df[\"loading\"]]\n+ colors = [\"#CC5500\" if v < 0 else \"#0055CC\" for v in df[\"loading\"]]\n fig, ax = plt.subplots(figsize=(8, max(4, n_top * 0.35)), dpi=self.dpi)\n \n ax.barh(\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "signed_loadings", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n1 passed, 85 deselected in 0.91s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "signed_loadings", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n1 passed, 85 deselected in 0.92s\n", + "stderr": "" + } + }, + { + "name": "C04_explicit_alignment_refusal", + "method": "plot_ae_recon_by_spectral_type", + "selection": "reconstruction_cardinality", + "changed_lines": [ + 2536, + 2537, + 2538 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "7e93d1ce3f02ab35d08218ceb54010b192f74840f324818bf3788f4e7c52dfc4", + "patch": "--- \n+++ \n@@ -2533,6 +2533,8 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ if not (len(X) == len(X_recon) == len(spectral_types)):\n+ raise RuntimeError(\"Observation alignment: incompatible lengths\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:204: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:204: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\n1 failed, 85 deselected in 0.88s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2537, + 2674, + 2679, + 2680, + 2803, + 2807, + 2865, + 2871, + 2872, + 2985, + 2988 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n1 passed, 85 deselected in 0.62s\n", + "stderr": "" + } + }, + { + "name": "C05_gravity_units", + "method": "plot_hr_teff_regions", + "selection": "hr_region_vertices", + "changed_lines": [ + 3039, + 3057 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "552acec69a5400440601692a3036f2dfff766b4b46643f0d66fcc879c98696b7", + "patch": "--- \n+++ \n@@ -3054,7 +3054,7 @@\n MS_G_HOT + (MS_G_COOL - MS_G_HOT) * 0.35,\n ),\n (T_LO + (T_HI - T_LO) * 0.25, MS_G_COOL - 0.10),\n- (T_LO + T_PAD, G_HI - T_PAD * 2),\n+ (T_LO + T_PAD, G_HI - G_PAD * 2),\n (T_LO + T_PAD, G_HI - G_PAD),\n (T_LO + (T_HI - T_LO) * 0.20, MS_G_COOL + MS_W * 0.6),\n (\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 85 deselected in 1.19s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n1 passed, 85 deselected in 1.05s\n", + "stderr": "" + } + }, + { + "name": "C06_count_omitted", + "method": "plot_hr_teff_regions", + "selection": "hr_population_title", + "changed_lines": [ + 3213, + 3215 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "ed1ffd93182289c0629f048ccb0acfbb0860b292a686da314b2682e25ff8bc3d", + "patch": "--- \n+++ \n@@ -3212,7 +3212,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 population fournie\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000279762AEB20>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000279B8512DC0>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000279762AEB20>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000279B8512DC0>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\n2 failed, 84 deselected in 1.32s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n2 passed, 84 deselected in 1.22s\n", + "stderr": "" + } + }, + { + "name": "C07_small_errors_retained", + "method": "plot_ae_error_distribution_logscale", + "selection": "log_histogram_keeps", + "changed_lines": [ + 2823, + 2824 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "fc96d6a64f3b0e40da6bf7c8e281e7e7a0134e037c22c97456ffc5ee5fd55cdc", + "patch": "--- \n+++ \n@@ -2821,7 +2821,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(max(vals.min(), np.finfo(float).tiny)), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:343: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:343: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\n1 failed, 85 deselected in 1.37s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n1 passed, 85 deselected in 1.32s\n", + "stderr": "" + } + }, + { + "name": "C08_scalar_axes_supported", + "method": "plot_ae_embedding", + "selection": "no_physical_columns and plot_ae_embedding", + "changed_lines": [ + 1112, + 1113 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "9c7bb5270f973d9ab2eed8f781d84cbee44d923aa5b2d0d39a80a92d9a9400bb", + "patch": "--- \n+++ \n@@ -1109,6 +1109,7 @@\n \n PALETTE = {\"STAR\": \"#4C72B0\", \"GALAXY\": \"#DD8452\", \"QSO\": \"#55A868\"}\n MARKERS = {\"STAR\": \"o\", \"GALAXY\": \"s\", \"QSO\": \"^\"}\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_ae_embedding", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:250: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:250: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\n1 failed, 85 deselected in 0.88s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_ae_embedding", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1115, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1126, + 1128, + 1129, + 1130, + 1131, + 1133, + 1155, + 1156, + 1157, + 1158, + 1160, + 1161, + 1164, + 1166, + 1167, + 1217, + 1257, + 1262, + 1263, + 1264, + 1316, + 1353, + 1358, + 1472, + 1477, + 1598, + 1601, + 1602, + 1603, + 1640, + 1645, + 1773, + 1778, + 1779, + 1953, + 1957, + 1958, + 2004, + 2008, + 2009, + 2056, + 2063, + 2163, + 2167, + 2215, + 2220, + 2221, + 2222, + 2289, + 2294, + 2391, + 2396, + 2528, + 2534, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n1 passed, 85 deselected in 0.71s\n", + "stderr": "" + } + }, + { + "name": "C09_zoom_scalar_axes_supported", + "method": "plot_latent_zoomed", + "selection": "no_physical_columns and plot_latent_zoomed", + "changed_lines": [ + 2321, + 2322 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c3d12005048a8d692f607a4977148b4a708dcf18f570cbdb4bd3bf710e6347fa", + "patch": "--- \n+++ \n@@ -2318,6 +2318,7 @@\n ]\n \n fig, axes = plt.subplots(1, 1 + len(available), figsize=(22, 5), dpi=self.dpi)\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_latent_zoomed", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:251: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:251: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\n1 failed, 85 deselected in 0.89s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_latent_zoomed", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2324, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2335, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2343, + 2345, + 2381, + 2382, + 2384, + 2385, + 2387, + 2388, + 2389, + 2391, + 2396, + 2528, + 2534, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n1 passed, 85 deselected in 0.74s\n", + "stderr": "" + } + }, + { + "name": "C10_profile_single_slot", + "method": "plot_hdbscan_feature_profiles", + "selection": "cluster_profiles_unavailable and 1", + "changed_lines": [ + 2020 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "e56d76446680544910180a2a4f1e5d99b53d58361a1fff7f4980a2113d7c0ffb", + "patch": "--- \n+++ \n@@ -2017,7 +2017,7 @@\n ncols = 4\n nrows = (n_show + ncols - 1) // ncols\n fig, axes = plt.subplots(nrows, ncols, figsize=(5 * ncols, 4 * nrows), dpi=120)\n- axes_flat = axes.flatten() if n_show > 1 else [axes]\n+ axes_flat = np.asarray(axes).ravel()\n \n for ax_i, cid in zip(axes_flat, top_cids):\n profile = cluster_means.loc[cid]\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_profiles_unavailable and 1", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:271: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:270: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:271: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:270: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\n1 failed, 85 deselected in 0.92s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_profiles_unavailable and 1", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n1 passed, 85 deselected in 0.72s\n", + "stderr": "" + } + }, + { + "name": "C11_display_whole_trust_range", + "method": "plot_trustworthiness", + "selection": "trustworthiness_axis_contains", + "changed_lines": [ + 2279 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "ad1c94878e026d9ddc675825313ec1ed5709f1128675e1fe1487f0c7310149fc", + "patch": "--- \n+++ \n@@ -2276,7 +2276,7 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0, 1.01)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:196: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:196: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\n1 failed, 85 deselected in 2.68s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n1 passed, 85 deselected in 2.30s\n", + "stderr": "" + } + }, + { + "name": "C12_hide_unused_reconstructions", + "method": "plot_ae_reconstruction", + "selection": "more_reconstructions or reconstruction_drawn_rows", + "changed_lines": [ + 1179, + 1180, + 1181 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c80b84e92e07174091bbdc7418f60720c07530d8c68d7023c1a3961ee09beac6", + "patch": "--- \n+++ \n@@ -1176,6 +1176,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in axes[len(idx):]:\n+ unused.set_visible(False)\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions or reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "...F [100%]\n================================== FAILURES ===================================\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n1 failed, 3 passed, 82 deselected in 1.47s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions or reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1180, + 1181, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1196, + 1197, + 1198, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1210, + 1212, + 1213, + 1216, + 1218, + 1258, + 1263, + 1264, + 1265, + 1317, + 1354, + 1359, + 1473, + 1478, + 1599, + 1602, + 1603, + 1604, + 1641, + 1646, + 1774, + 1779, + 1780, + 1954, + 1958, + 1959, + 2005, + 2009, + 2010, + 2057, + 2064, + 2164, + 2168, + 2216, + 2221, + 2222, + 2223, + 2290, + 2295, + 2392, + 2397, + 2529, + 2535, + 2674, + 2679, + 2680, + 2803, + 2807, + 2865, + 2871, + 2872, + 2985, + 2988 + ], + "stdout": ".... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n4 passed, 82 deselected in 1.30s\n", + "stderr": "" + } + }, + { + "name": "F01_always_refuse_alignment", + "method": "plot_ae_recon_by_spectral_type", + "selection": "reconstruction_cardinality or spectral_type_means", + "changed_lines": [ + 2536, + 2537 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "e0e0abae314f5e5eb2996177d79dd93ed57a2e3f751236cfc0d37a00e3a0b195", + "patch": "--- \n+++ \n@@ -2533,6 +2533,7 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ raise RuntimeError(\"Observation alignment unavailable\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality or spectral_type_means", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:204: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".F [100%]\n================================== FAILURES ===================================\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:204: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\n1 failed, 1 passed, 84 deselected in 0.92s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality or spectral_type_means", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:329: in test_spectral_type_means_for_aligned_unequal_classes\n result = c.viz.plot_ae_recon_by_spectral_type(\nsrc\\dimred\\dimred_visualizer.py:2536: in plot_ae_recon_by_spectral_type\n raise RuntimeError(\"Observation alignment unavailable\")\nE RuntimeError: Observation alignment unavailable\n\nDuring handling of the above exception, another exception occurred:\ntests\\test_dimred_visualizer.py:333: in test_spectral_type_means_for_aligned_unequal_classes\n assert False, f\"Valid aligned reconstruction must remain usable: {exc}\"\nE AssertionError: Valid aligned reconstruction must remain usable: Observation alignment unavailable\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": "F. [100%]\n================================== FAILURES ===================================\n____________ test_spectral_type_means_for_aligned_unequal_classes _____________\ntests\\test_dimred_visualizer.py:329: in test_spectral_type_means_for_aligned_unequal_classes\n result = c.viz.plot_ae_recon_by_spectral_type(\nsrc\\dimred\\dimred_visualizer.py:2536: in plot_ae_recon_by_spectral_type\n raise RuntimeError(\"Observation alignment unavailable\")\nE RuntimeError: Observation alignment unavailable\n\nDuring handling of the above exception, another exception occurred:\ntests\\test_dimred_visualizer.py:333: in test_spectral_type_means_for_aligned_unequal_classes\n assert False, f\"Valid aligned reconstruction must remain usable: {exc}\"\nE AssertionError: Valid aligned reconstruction must remain usable: Observation alignment unavailable\nE assert False\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_spectral_type_means_for_aligned_unequal_classes\n1 failed, 1 passed, 84 deselected in 0.88s\n", + "stderr": "" + } + }, + { + "name": "F02_empty_hr", + "method": "plot_hr_teff_regions", + "selection": "hr_region_vertices", + "changed_lines": [ + 3160, + 3161 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "6bd35b2de52d08c61471145b27b92596e95f09e2266dd9e394fed28562632d61", + "patch": "--- \n+++ \n@@ -3157,6 +3157,7 @@\n cbar.ax.tick_params(labelsize=9)\n \n # \u2500\u2500 R\u00e9gions stellaires \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n+ REGIONS = []\n for region in REGIONS:\n patch = MplPolygon(\n np.array(region[\"poly\"]),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 85 deselected in 1.17s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:167: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert ax.patches, \"Valid HR regional figure must contain informative regions\"\nE AssertionError: Valid HR regional figure must contain informative regions\nE assert \nE + where = .patches" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3200, + 3204, + 3205, + 3206, + 3207, + 3209, + 3210, + 3212, + 3213, + 3214, + 3215, + 3217, + 3218, + 3220, + 3221, + 3223, + 3224 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:167: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert ax.patches, \"Valid HR regional figure must contain informative regions\"\nE AssertionError: Valid HR regional figure must contain informative regions\nE assert \nE + where = .patches\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 85 deselected in 1.15s\n", + "stderr": "" + } + }, + { + "name": "C13_integrated_kde_mass", + "method": "plot_latent_kde", + "selection": "kde_labeled_regions or real_kde_reproducible", + "changed_lines": [ + 2427, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "302fe10399fed0e6d61b3108c8095e46ad1f329d40eba152223be16efb5e5020", + "patch": "--- \n+++ \n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered) / ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass, p)]) for p in [.68, .95, .99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions or real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 1 passed, 80 deselected in 16.94s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions or real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "...... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n6 passed, 80 deselected in 27.44s\n", + "stderr": "" + } + }, + { + "name": "F03_normal_thresholds_for_every_kde", + "method": "plot_latent_kde", + "selection": "kde_labeled_regions", + "changed_lines": [ + 2433, + 2434, + 2435 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "a4009e917c5151559ea5006b33f0465c7f5ca163cfec14c0d5f29f3755c56b0b", + "patch": "--- \n+++ \n@@ -2430,24 +2430,7 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ levels = [(1-p)/(2*np.pi) for p in [.99, .95, .68]]\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 16.32s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.04626727\nE Max relative difference among violations: 0.04673462\nE ACTUAL: array(0.943733)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.04998785\nE Max relative difference among violations: 0.05049278\nE ACTUAL: array(0.940012)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02752703\nE Max relative difference among violations: 0.02780508\nE ACTUAL: array(0.962473)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02209737\nE Max relative difference among violations: 0.02232058\nE ACTUAL: array(0.967903)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02727094\nE Max relative difference among violations: 0.0275464\nE ACTUAL: array(0.962729)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2435, + 2436, + 2437, + 2438, + 2440, + 2441, + 2442, + 2443, + 2446, + 2447, + 2448, + 2450, + 2451, + 2452, + 2454, + 2455, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2467, + 2468, + 2470, + 2471, + 2473, + 2474, + 2476, + 2478, + 2479, + 2480, + 2481, + 2482, + 2483, + 2484, + 2485, + 2486, + 2487, + 2488, + 2489, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2502, + 2503, + 2504, + 2506, + 2507, + 2508, + 2510, + 2516, + 2655, + 2660, + 2661, + 2784, + 2788, + 2846, + 2852, + 2853, + 2966, + 2969 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.04626727\nE Max relative difference among violations: 0.04673462\nE ACTUAL: array(0.943733)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.04998785\nE Max relative difference among violations: 0.05049278\nE ACTUAL: array(0.940012)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02752703\nE Max relative difference among violations: 0.02780508\nE ACTUAL: array(0.962473)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02209737\nE Max relative difference among violations: 0.02232058\nE ACTUAL: array(0.967903)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02727094\nE Max relative difference among violations: 0.0275464\nE ACTUAL: array(0.962729)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 16.47s\n", + "stderr": "" + } + } + ], + "executed_files_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/proofs_dimred_visualizer.py": "6fd1f1ed7d1cc5202f8835b3e32ab838d5c9df05754e11d524af05c744f1fbd3", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3" + }, + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000029E02303E60>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000029EAD5933E0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:204: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:238: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x0000029EAD4F2500>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:250: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:251: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:271: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:270: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:279: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:326: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:343: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]))\nE + where = .exclusion_report" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:364: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1469/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1469/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:196: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:432: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:437: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1199, + 1200, + 1201, + 1202, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FFFFFFFFFFFFFFF.FFFFFFFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000029E02303E60>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000029EAD5933E0>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:204: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:238: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x0000029EAD4F2500>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:250: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:251: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:271: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:270: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:279: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:326: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:343: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]))\nE + where = .exclusion_report\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:364: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1469/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1469/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:196: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:432: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:437: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-2t2bsrde\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n25 failed, 1 passed in 24.10s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_review_original_controls_results.json b/audit/m28_review_original_controls_results.json new file mode 100644 index 0000000..38a6ece --- /dev/null +++ b/audit/m28_review_original_controls_results.json @@ -0,0 +1,9943 @@ +{ + "active_head": "4364c61f56d91f7ec93c5c6072b9f88c46023241", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7fd6d4164a9bd50a52e3a47e79eef197c7963dcc6cd5e96be4231383e7ca3a25", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6" + }, + "mode": "proofs", + "runs": [ + { + "name": "C14_renderable_mathtext", + "method": "plot_eigenspectra", + "selection": "default_eigenspectrum", + "changed_lines": [ + 869, + 872 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "b3ea1715d05ad316ba907994cf51f603855f85e89009b7cc151e980a76481c6f", + "patch": "--- \n+++ \n@@ -869,7 +869,7 @@\n ax.text(\n lam,\n ymax * 0.88,\n- nom,\n+ nom.replace(chr(92)*2, chr(92)),\n rotation=90,\n fontsize=6,\n color=\"crimson\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_eigenspectrum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:415: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:420: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:415: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:420: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\n1 failed, 85 deselected in 1.96s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_eigenspectrum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n1 passed, 85 deselected in 1.03s\n", + "stderr": "" + } + }, + { + "name": "C01_equivalent_percent", + "method": "plot_variance_explained", + "selection": "real_pca_variance", + "changed_lines": [ + 154 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "8b74921a093af4f83f08890f592c4c0952217b3b46be509081ed8d56a050a69e", + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, 100 * ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n1 passed, 85 deselected in 2.67s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n1 passed, 85 deselected in 2.60s\n", + "stderr": "" + } + }, + { + "name": "C02_alternative_export", + "method": "_save", + "selection": "real_export_readable", + "changed_lines": [ + 1018 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "95ac85f7fbb81f0932ea60d4962a8d00b3eae4d5c2b4148589e17266f2a9d953", + "patch": "--- \n+++ \n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ fig.canvas.print_figure(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n2 passed, 84 deselected in 1.21s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n2 passed, 84 deselected in 1.23s\n", + "stderr": "" + } + }, + { + "name": "C03_alternative_palette", + "method": "plot_loadings_bar", + "selection": "signed_loadings", + "changed_lines": [ + 288 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c8833a129a116501b3ba962a48791953da763ac97fcf1c87d41ade0e8e6994f4", + "patch": "--- \n+++ \n@@ -285,7 +285,7 @@\n df = df.sort_values(\"loading\")\n \n # Couleur encodant le signe physique de la contribution.\n- colors = [\"#DD8452\" if v < 0 else \"#4C72B0\" for v in df[\"loading\"]]\n+ colors = [\"#CC5500\" if v < 0 else \"#0055CC\" for v in df[\"loading\"]]\n fig, ax = plt.subplots(figsize=(8, max(4, n_top * 0.35)), dpi=self.dpi)\n \n ax.barh(\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "signed_loadings", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n1 passed, 85 deselected in 0.91s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "signed_loadings", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n1 passed, 85 deselected in 0.93s\n", + "stderr": "" + } + }, + { + "name": "C04_explicit_alignment_refusal", + "method": "plot_ae_recon_by_spectral_type", + "selection": "reconstruction_cardinality", + "changed_lines": [ + 2536, + 2537, + 2538 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "7e93d1ce3f02ab35d08218ceb54010b192f74840f324818bf3788f4e7c52dfc4", + "patch": "--- \n+++ \n@@ -2533,6 +2533,8 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ if not (len(X) == len(X_recon) == len(spectral_types)):\n+ raise RuntimeError(\"Observation alignment: incompatible lengths\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:187: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:187: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\n1 failed, 85 deselected in 0.87s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2537, + 2674, + 2679, + 2680, + 2803, + 2807, + 2865, + 2871, + 2872, + 2985, + 2988 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n1 passed, 85 deselected in 0.64s\n", + "stderr": "" + } + }, + { + "name": "C05_gravity_units", + "method": "plot_hr_teff_regions", + "selection": "hr_region_vertices", + "changed_lines": [ + 3039, + 3057 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "552acec69a5400440601692a3036f2dfff766b4b46643f0d66fcc879c98696b7", + "patch": "--- \n+++ \n@@ -3054,7 +3054,7 @@\n MS_G_HOT + (MS_G_COOL - MS_G_HOT) * 0.35,\n ),\n (T_LO + (T_HI - T_LO) * 0.25, MS_G_COOL - 0.10),\n- (T_LO + T_PAD, G_HI - T_PAD * 2),\n+ (T_LO + T_PAD, G_HI - G_PAD * 2),\n (T_LO + T_PAD, G_HI - G_PAD),\n (T_LO + (T_HI - T_LO) * 0.20, MS_G_COOL + MS_W * 0.6),\n (\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:152: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:152: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 85 deselected in 1.16s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n1 passed, 85 deselected in 1.04s\n", + "stderr": "" + } + }, + { + "name": "C06_count_omitted", + "method": "plot_hr_teff_regions", + "selection": "hr_population_title", + "changed_lines": [ + 3213, + 3215 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "ed1ffd93182289c0629f048ccb0acfbb0860b292a686da314b2682e25ff8bc3d", + "patch": "--- \n+++ \n@@ -3212,7 +3212,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 population fournie\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:167: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001576D4AEB20>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:167: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000157AF6F4AC0>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:167: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001576D4AEB20>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:167: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000157AF6F4AC0>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\n2 failed, 84 deselected in 1.36s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n2 passed, 84 deselected in 1.19s\n", + "stderr": "" + } + }, + { + "name": "C07_small_errors_retained", + "method": "plot_ae_error_distribution_logscale", + "selection": "log_histogram_keeps", + "changed_lines": [ + 2823, + 2824 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "fc96d6a64f3b0e40da6bf7c8e281e7e7a0134e037c22c97456ffc5ee5fd55cdc", + "patch": "--- \n+++ \n@@ -2821,7 +2821,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(max(vals.min(), np.finfo(float).tiny)), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:326: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:326: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\n1 failed, 85 deselected in 1.36s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n1 passed, 85 deselected in 1.32s\n", + "stderr": "" + } + }, + { + "name": "C08_scalar_axes_supported", + "method": "plot_ae_embedding", + "selection": "no_physical_columns and plot_ae_embedding", + "changed_lines": [ + 1112, + 1113 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "9c7bb5270f973d9ab2eed8f781d84cbee44d923aa5b2d0d39a80a92d9a9400bb", + "patch": "--- \n+++ \n@@ -1109,6 +1109,7 @@\n \n PALETTE = {\"STAR\": \"#4C72B0\", \"GALAXY\": \"#DD8452\", \"QSO\": \"#55A868\"}\n MARKERS = {\"STAR\": \"o\", \"GALAXY\": \"s\", \"QSO\": \"^\"}\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_ae_embedding", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:233: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:236: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:233: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:236: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\n1 failed, 85 deselected in 0.92s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_ae_embedding", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1115, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1126, + 1128, + 1129, + 1130, + 1131, + 1133, + 1155, + 1156, + 1157, + 1158, + 1160, + 1161, + 1164, + 1166, + 1167, + 1217, + 1257, + 1262, + 1263, + 1264, + 1316, + 1353, + 1358, + 1472, + 1477, + 1598, + 1601, + 1602, + 1603, + 1640, + 1645, + 1773, + 1778, + 1779, + 1953, + 1957, + 1958, + 2004, + 2008, + 2009, + 2056, + 2063, + 2163, + 2167, + 2215, + 2220, + 2221, + 2222, + 2289, + 2294, + 2391, + 2396, + 2528, + 2534, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n1 passed, 85 deselected in 0.71s\n", + "stderr": "" + } + }, + { + "name": "C09_zoom_scalar_axes_supported", + "method": "plot_latent_zoomed", + "selection": "no_physical_columns and plot_latent_zoomed", + "changed_lines": [ + 2321, + 2322 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c3d12005048a8d692f607a4977148b4a708dcf18f570cbdb4bd3bf710e6347fa", + "patch": "--- \n+++ \n@@ -2318,6 +2318,7 @@\n ]\n \n fig, axes = plt.subplots(1, 1 + len(available), figsize=(22, 5), dpi=self.dpi)\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_latent_zoomed", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:234: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:236: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:234: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:236: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\n1 failed, 85 deselected in 0.90s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_latent_zoomed", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2324, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2335, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2343, + 2345, + 2381, + 2382, + 2384, + 2385, + 2387, + 2388, + 2389, + 2391, + 2396, + 2528, + 2534, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n1 passed, 85 deselected in 0.75s\n", + "stderr": "" + } + }, + { + "name": "C10_profile_single_slot", + "method": "plot_hdbscan_feature_profiles", + "selection": "cluster_profiles_unavailable and 1", + "changed_lines": [ + 2020 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "e56d76446680544910180a2a4f1e5d99b53d58361a1fff7f4980a2113d7c0ffb", + "patch": "--- \n+++ \n@@ -2017,7 +2017,7 @@\n ncols = 4\n nrows = (n_show + ncols - 1) // ncols\n fig, axes = plt.subplots(nrows, ncols, figsize=(5 * ncols, 4 * nrows), dpi=120)\n- axes_flat = axes.flatten() if n_show > 1 else [axes]\n+ axes_flat = np.asarray(axes).ravel()\n \n for ax_i, cid in zip(axes_flat, top_cids):\n profile = cluster_means.loc[cid]\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_profiles_unavailable and 1", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:254: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:254: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\n1 failed, 85 deselected in 0.92s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_profiles_unavailable and 1", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n1 passed, 85 deselected in 0.82s\n", + "stderr": "" + } + }, + { + "name": "C11_display_whole_trust_range", + "method": "plot_trustworthiness", + "selection": "trustworthiness_axis_contains", + "changed_lines": [ + 2279 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "ad1c94878e026d9ddc675825313ec1ed5709f1128675e1fe1487f0c7310149fc", + "patch": "--- \n+++ \n@@ -2276,7 +2276,7 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0, 1.01)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:403: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:196: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:403: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:196: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\n1 failed, 85 deselected in 2.73s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n1 passed, 85 deselected in 2.28s\n", + "stderr": "" + } + }, + { + "name": "C12_hide_unused_reconstructions", + "method": "plot_ae_reconstruction", + "selection": "more_reconstructions or reconstruction_drawn_rows", + "changed_lines": [ + 1179, + 1180, + 1181 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c80b84e92e07174091bbdc7418f60720c07530d8c68d7023c1a3961ee09beac6", + "patch": "--- \n+++ \n@@ -1176,6 +1176,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in axes[len(idx):]:\n+ unused.set_visible(False)\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions or reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:275: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "...F [100%]\n================================== FAILURES ===================================\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:275: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n1 failed, 3 passed, 82 deselected in 1.45s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions or reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1180, + 1181, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1196, + 1197, + 1198, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1210, + 1212, + 1213, + 1216, + 1218, + 1258, + 1263, + 1264, + 1265, + 1317, + 1354, + 1359, + 1473, + 1478, + 1599, + 1602, + 1603, + 1604, + 1641, + 1646, + 1774, + 1779, + 1780, + 1954, + 1958, + 1959, + 2005, + 2009, + 2010, + 2057, + 2064, + 2164, + 2168, + 2216, + 2221, + 2222, + 2223, + 2290, + 2295, + 2392, + 2397, + 2529, + 2535, + 2674, + 2679, + 2680, + 2803, + 2807, + 2865, + 2871, + 2872, + 2985, + 2988 + ], + "stdout": ".... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n4 passed, 82 deselected in 1.27s\n", + "stderr": "" + } + }, + { + "name": "F01_always_refuse_alignment", + "method": "plot_ae_recon_by_spectral_type", + "selection": "reconstruction_cardinality or spectral_type_means", + "changed_lines": [ + 2536, + 2537 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "e0e0abae314f5e5eb2996177d79dd93ed57a2e3f751236cfc0d37a00e3a0b195", + "patch": "--- \n+++ \n@@ -2533,6 +2533,7 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ raise RuntimeError(\"Observation alignment unavailable\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality or spectral_type_means", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:187: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".F [100%]\n================================== FAILURES ===================================\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:187: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\n1 failed, 1 passed, 84 deselected in 0.93s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality or spectral_type_means", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:329: in test_spectral_type_means_for_aligned_unequal_classes\n result = c.viz.plot_ae_recon_by_spectral_type(\nsrc\\dimred\\dimred_visualizer.py:2536: in plot_ae_recon_by_spectral_type\n raise RuntimeError(\"Observation alignment unavailable\")\nE RuntimeError: Observation alignment unavailable\n\nDuring handling of the above exception, another exception occurred:\ntests\\test_dimred_visualizer.py:333: in test_spectral_type_means_for_aligned_unequal_classes\n assert False, f\"Valid aligned reconstruction must remain usable: {exc}\"\nE AssertionError: Valid aligned reconstruction must remain usable: Observation alignment unavailable\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": "F. [100%]\n================================== FAILURES ===================================\n____________ test_spectral_type_means_for_aligned_unequal_classes _____________\ntests\\test_dimred_visualizer.py:329: in test_spectral_type_means_for_aligned_unequal_classes\n result = c.viz.plot_ae_recon_by_spectral_type(\nsrc\\dimred\\dimred_visualizer.py:2536: in plot_ae_recon_by_spectral_type\n raise RuntimeError(\"Observation alignment unavailable\")\nE RuntimeError: Observation alignment unavailable\n\nDuring handling of the above exception, another exception occurred:\ntests\\test_dimred_visualizer.py:333: in test_spectral_type_means_for_aligned_unequal_classes\n assert False, f\"Valid aligned reconstruction must remain usable: {exc}\"\nE AssertionError: Valid aligned reconstruction must remain usable: Observation alignment unavailable\nE assert False\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_spectral_type_means_for_aligned_unequal_classes\n1 failed, 1 passed, 84 deselected in 0.88s\n", + "stderr": "" + } + }, + { + "name": "F02_empty_hr", + "method": "plot_hr_teff_regions", + "selection": "hr_region_vertices", + "changed_lines": [ + 3160, + 3161 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "6bd35b2de52d08c61471145b27b92596e95f09e2266dd9e394fed28562632d61", + "patch": "--- \n+++ \n@@ -3157,6 +3157,7 @@\n cbar.ax.tick_params(labelsize=9)\n \n # \u2500\u2500 R\u00e9gions stellaires \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n+ REGIONS = []\n for region in REGIONS:\n patch = MplPolygon(\n np.array(region[\"poly\"]),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:152: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:152: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 85 deselected in 1.15s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:150: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert ax.patches, \"Valid HR regional figure must contain informative regions\"\nE AssertionError: Valid HR regional figure must contain informative regions\nE assert \nE + where = .patches" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3200, + 3204, + 3205, + 3206, + 3207, + 3209, + 3210, + 3212, + 3213, + 3214, + 3215, + 3217, + 3218, + 3220, + 3221, + 3223, + 3224 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:150: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert ax.patches, \"Valid HR regional figure must contain informative regions\"\nE AssertionError: Valid HR regional figure must contain informative regions\nE assert \nE + where = .patches\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 85 deselected in 1.14s\n", + "stderr": "" + } + }, + { + "name": "C13_integrated_kde_mass", + "method": "plot_latent_kde", + "selection": "kde_labeled_regions or real_kde_reproducible", + "changed_lines": [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "cf78a93bdb382d2c8b9fcfbebabb17f7af8570d0e220d9588ae8d02d8f754513", + "patch": "--- \n+++ \n@@ -2430,24 +2430,15 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered) / ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass, p)]) for p in [.68, .95, .99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions or real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 1 passed, 80 deselected in 17.05s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions or real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "...... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n6 passed, 80 deselected in 24.60s\n", + "stderr": "" + } + }, + { + "name": "F03_normal_thresholds_for_every_kde", + "method": "plot_latent_kde", + "selection": "kde_labeled_regions", + "changed_lines": [ + 2433, + 2434, + 2435 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "a4009e917c5151559ea5006b33f0465c7f5ca163cfec14c0d5f29f3755c56b0b", + "patch": "--- \n+++ \n@@ -2430,24 +2430,7 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ levels = [(1-p)/(2*np.pi) for p in [.99, .95, .68]]\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 16.56s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.04626727\nE Max relative difference among violations: 0.04673462\nE ACTUAL: array(0.943733)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.04998785\nE Max relative difference among violations: 0.05049278\nE ACTUAL: array(0.940012)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02752703\nE Max relative difference among violations: 0.02780508\nE ACTUAL: array(0.962473)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02209737\nE Max relative difference among violations: 0.02232058\nE ACTUAL: array(0.967903)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02727094\nE Max relative difference among violations: 0.0275464\nE ACTUAL: array(0.962729)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2435, + 2436, + 2437, + 2438, + 2440, + 2441, + 2442, + 2443, + 2446, + 2447, + 2448, + 2450, + 2451, + 2452, + 2454, + 2455, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2467, + 2468, + 2470, + 2471, + 2473, + 2474, + 2476, + 2478, + 2479, + 2480, + 2481, + 2482, + 2483, + 2484, + 2485, + 2486, + 2487, + 2488, + 2489, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2502, + 2503, + 2504, + 2506, + 2507, + 2508, + 2510, + 2516, + 2655, + 2660, + 2661, + 2784, + 2788, + 2846, + 2852, + 2853, + 2966, + 2969 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.04626727\nE Max relative difference among violations: 0.04673462\nE ACTUAL: array(0.943733)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.04998785\nE Max relative difference among violations: 0.05049278\nE ACTUAL: array(0.940012)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02752703\nE Max relative difference among violations: 0.02780508\nE ACTUAL: array(0.962473)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02209737\nE Max relative difference among violations: 0.02232058\nE ACTUAL: array(0.967903)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02727094\nE Max relative difference among violations: 0.0275464\nE ACTUAL: array(0.962729)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 81 deselected in 16.32s\n", + "stderr": "" + } + } + ], + "executed_files_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7fd6d4164a9bd50a52e3a47e79eef197c7963dcc6cd5e96be4231383e7ca3a25", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/proofs_dimred_visualizer.py": "2977b9033b086f26b611f8e3e3d1f8357fd8846142ad39c1be7d0b512bff9e4e", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3" + }, + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:152: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:167: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000022AB3ED3E60>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:167: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000022AB9B5F5A0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:187: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:221: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x0000022AB9BAD0E0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:233: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:236: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:234: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:236: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:254: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:262: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:275: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:309: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:326: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]))\nE + where = .exclusion_report" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:347: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:390: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1434/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:390: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1434/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:403: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:196: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:415: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:420: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:441: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1199, + 1200, + 1201, + 1202, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FFFFFFFFFFFFFFF.FFFFFFFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:120: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:152: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:167: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000022AB3ED3E60>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:167: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000022AB9B5F5A0>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:187: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:211: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:211: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:221: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x0000022AB9BAD0E0>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:233: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:236: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:234: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:236: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:254: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:262: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:275: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:309: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:326: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]))\nE + where = .exclusion_report\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:347: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:390: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1434/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:390: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1434/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:403: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:196: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:415: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:420: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:441: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wjuva5e6\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n25 failed, 1 passed in 22.55s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_review_proof_baseline_results.json b/audit/m28_review_proof_baseline_results.json new file mode 100644 index 0000000..4beca2f --- /dev/null +++ b/audit/m28_review_proof_baseline_results.json @@ -0,0 +1,1244 @@ +{ + "active_head": "4364c61f56d91f7ec93c5c6072b9f88c46023241", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6" + }, + "mode": "baseline", + "runs": [], + "executed_files_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/proofs_dimred_visualizer.py": "6fd1f1ed7d1cc5202f8835b3e32ab838d5c9df05754e11d524af05c744f1fbd3", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3" + }, + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000159FDFC3E60>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000015A2E5AF3E0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:204: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:238: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x0000015A2E582500>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:250: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:251: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:271: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:270: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:279: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:326: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:343: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]))\nE + where = .exclusion_report" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:364: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1448/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1448/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:196: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:432: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:437: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1199, + 1200, + 1201, + 1202, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FFFFFFFFFFFFFFF.FFFFFFFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000159FDFC3E60>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x0000015A2E5AF3E0>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:204: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:230: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:238: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x0000015A2E582500>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:250: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:251: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:271: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:270: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:279: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:326: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:343: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]))\nE + where = .exclusion_report\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:364: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1448/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1448/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:196: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:432: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:437: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-wzyuaejw\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n25 failed, 1 passed in 24.72s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_review_reverse_results.json b/audit/m28_review_reverse_results.json new file mode 100644 index 0000000..5dcf79e --- /dev/null +++ b/audit/m28_review_reverse_results.json @@ -0,0 +1,2396 @@ +{ + "active_head": "4364c61f56d91f7ec93c5c6072b9f88c46023241", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7fd6d4164a9bd50a52e3a47e79eef197c7963dcc6cd5e96be4231383e7ca3a25", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6" + }, + "mode": "reverse", + "runs": [], + "executed_files_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7fd6d4164a9bd50a52e3a47e79eef197c7963dcc6cd5e96be4231383e7ca3a25", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/proofs_dimred_visualizer.py": "6fd1f1ed7d1cc5202f8835b3e32ab838d5c9df05754e11d524af05c744f1fbd3", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3" + }, + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "............................................................ [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-hp1871y8\\result.xml -\n60 passed in 19.31s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_review_threads.json b/audit/m28_review_threads.json new file mode 100644 index 0000000..cb81487 --- /dev/null +++ b/audit/m28_review_threads.json @@ -0,0 +1,150 @@ +{ + "review": "5858927009", + "head": "4364c61f56d91f7ec93c5c6072b9f88c46023241", + "threads": [ + { + "id": "PRRT_kwDOPIrQS862LHTE", + "is_resolved": false, + "path": "audit/M28_PROOFS.md", + "line": 18, + "comments": [ + { + "id": 4538039597, + "body": "**R1 — Bloquant — D01 (`ed1d91e:tests/proofs_dimred_visualizer.py:46-122`) : la preuve KDE accepte de faux correctifs**\n\n- **Contrat :** chaque contour étiqueté p % enferme la masse p de la KDE ajustée sur la population STAR, **à l'endroit où il est tracé**.\n- **Preuve** (copies jetables, base = C13 de Codex, sites atteints, collection identique). Passent `kde_labeled_regions[real_scipy]`, `[analytic_normal]` et `real_kde_reproducible` :\n - **K6** : niveaux C13 avec labels inversés (`[\"68%\", \"95%\", \"99%\"]`) → 3/3 PASS. Les labels ne sont jamais lus.\n - **K8** : `ax.contour(XX, YY, ZZ.T, …)` → 3/3 PASS. Les niveaux sont justes mais la géométrie est fausse ; la quadrature sur la grille tracée est invariante par transposition.\n - **K7** : `gaussian_kde(Z_ae.T)`, toutes classes confondues → 3/3 PASS. La fixture ne contient que des STAR et l'oracle intègre l'estimateur produit lui-même (`fitted[0]`).\n - **K1B** : `levels = (1-p)·max(ZZ)`, exact pour **toute** gaussienne et faux sinon → `analytic_normal` PASS. `real_scipy` échoue (0,6667 contre 0,68), mais seulement à cause de l'échantillon : K1B passe sur **11/60** autres graines de la même fixture. diag(4,9) a éliminé F03 sans fermer la classe des « seuils valides seulement pour la famille gaussienne ».\n- **Risque :** la preuve qui validera le correctif P1 #101 peut accepter une figure fausse.\n- **Correction attendue dans les tests :**\n 1. population STAR non gaussienne (mélange bimodal anisotrope) et lignes non-STAR hors mode ;\n 2. lecture du label affiché pour chaque niveau, comparé à la masse intégrée ;\n 3. densité de l'estimateur aux sommets de `cs.allsegs[i]` ≈ `cs.levels[i]` ;\n 4. `est.dataset` ⊂ lignes STAR ;\n 5. ajout de K1B, K6, K7 et K8 aux faux correctifs de `check_m28_evidence.py`.\n- **Alternatives admissibles :** mon contre-oracle (code dans la synthèse) accepte C13, K4 (`kde.resample`, Monte-Carlo) et K5 (grille élargie de 4 σ_KDE). Il rejette K1B (écart de masse 0,065, contre une tolérance de 0,006), K6, K7 et K8.\n\n---\n_Generated by [Claude Code](https://claude.ai/code)_" + } + ] + }, + { + "id": "PRRT_kwDOPIrQS862LHTR", + "is_resolved": false, + "path": "audit/M28_DIMRED_VISUALIZER.md", + "line": 39, + "comments": [ + { + "id": 4538039614, + "body": "**R2a — Bloquant : le stub analytique rejette des remèdes KDE légitimes**\n\n`StandardNormal` n'implémente que `__call__`. Deux correctifs mathématiquement corrects passent `real_scipy` et mon contre-oracle non gaussien, mais échouent `analytic_normal` pour une raison non scientifique :\n- **K4** (seuils par rééchantillonnage de la KDE, 2·10⁵ tirages) : `AttributeError: 'StandardNormal' object has no attribute 'resample'`.\n- **K5** (grille élargie par la bande passante) : `AttributeError: … 'covariance'`.\n\n**Correction attendue :** un stub qui expose l'interface `gaussian_kde` réellement utilisable par un correctif (`dataset`, `d`, `n`, `covariance`, `factor`, `resample`, `evaluate`/`__call__`) et qui est cohérent avec la loi exacte N(0, diag(4,9)) ; `resample` tire dans cette loi. À défaut, documenter l'interface imposée au futur correctif de #101. L'oracle analytique lui-même est exact : je l'ai vérifié par dblquad (normalisation 1 − 6·10⁻¹⁵), Monte-Carlo sur 2·10⁶ tirages et χ²₂ (1 − 12πt). Le seuil au-dessus du pic donne bien une masse nulle.\n\n---\n_Generated by [Claude Code](https://claude.ai/code)_" + } + ] + }, + { + "id": "PRRT_kwDOPIrQS862LHTX", + "is_resolved": false, + "path": "audit/M28_PROOFS.md", + "line": 22, + "comments": [ + { + "id": 4538039624, + "body": "**R2b — Bloquant : D05 rejette une légende catégorielle exacte**\n\nRemède testé : suppression de la colorbar et de l'annotation, remplacées par `ax.legend(handles=[Patch(color=color_map[c], label=f\"C{c}\") …], title=\"Cluster ID\")`. Les couleurs sont exactement celles des points. Résultat : `cluster_colorbar[plot_hdbscan_clusters]` FAIL avec « Cluster identity must remain interpretable », alors que la suite verte HDBSCAN reste à 3/3. L'adaptateur n'accepte qu'une colorbar libellée `Cluster ID` ou un texte `C{cid}` avec bbox.\n\n**Correction attendue :** accepter aussi les handles de légende (couleur de face = RGB des points du cluster, label `C{cid}`). Aucune palette ni forme de légende ne doit être imposée.\n\n**Satisfiabilité :** une colorbar `ListedColormap` + `BoundaryNorm` construite sur les IDs réels passe les deux cas D05.\n\n---\n_Generated by [Claude Code](https://claude.ai/code)_" + } + ] + }, + { + "id": "PRRT_kwDOPIrQS862LHTf", + "is_resolved": false, + "path": "audit/M28_PROOFS.md", + "line": 19, + "comments": [ + { + "id": 4538039633, + "body": "**R3 — Bloquant : des preuves P2 sont satisfaites par de faux correctifs non grammaticaux**\n\n| Groupe | Faux correctif (copie jetable, site atteint) | Résultat | Cause |\n|---|---|---|---|\n| D02 (ici) | `set_ylim` élargi jusqu'aux sommets (l'axe affiche jusqu'à −93 dex) | `hr_region_vertices` **PASS** | Le domaine vient de `ax.get_ylim()`, fixé par le code testé : contrôle circulaire |\n| D09 (l. 26) | `ax.plot([], [])` sur les panneaux inutilisés | 4/4 PASS | `ax.lines` non vide ≠ données |\n| D11 (l. 28) | Premier bord à `vals.min()`, mais histogramme de `vals[vals >= 1e-4]` | PASS (et suite verte) | Seul le bord est contrôlé, pas les effectifs |\n| D12 (l. 29) | `ax.plot([], [], label=\"E (n=2)\")`, sans histogramme pour E | PASS (et suite verte) | Seules les étiquettes de légende sont lues |\n| D13 (l. 30) | `plt.figure().savefig(output_dir / …)` (figure vierge) | PASS (cas training) | Seule l'existence du fichier est vérifiée |\n\n**Correction attendue :**\n- D02 : domaine physique indépendant de l'axe (log g fini des données ± marge en dex, ou bornes justifiées) ;\n- D09 : chaque panneau visible porte des lignes non vides, et leur nombre égale le nombre de lignes réelles ;\n- D11 : chaque MSE positive est comptée (somme des effectifs des barres = n) ;\n- D12 : un conteneur par classe, contenant n_classe observations ;\n- D13 : le PNG par défaut est identique (pixels) à un export explicite de la même figure.\n\n**Alternatives admissibles :** C05, C07 et C12 passent toujours. Mes remèdes D12 (`zip(classes, palette * k)`) et D13 (`self._save`) aussi : avec les 14 contrôles de Codex, la satisfiabilité conjointe est de 75/75 (voir la synthèse).\n\n---\n_Generated by [Claude Code](https://claude.ai/code)_" + } + ] + }, + { + "id": "PRRT_kwDOPIrQS862LHTk", + "is_resolved": false, + "path": "tests/test_dimred_visualizer.py", + "line": 476, + "comments": [ + { + "id": 4538039641, + "body": "**R4 — Bloquant : légendes non reliées aux observations**\n\nMutants originaux qui survivent (suite verte, site atteint, collection identique) :\n- **N01** `plot_xgboost_umap` : noms de classes décalés, effectifs corrects (« G (n=3) » sur les points F) → 2/2 PASS. Seul `n=` est vérifié, ici.\n- **N02** `plot_hdbscan_clusters`, panneau des classes (l. 377-378) : même décalage → 7/7 PASS.\n- **N04** `plot_synthesis_grid` (l. 590-597) : noms de méthode inversés dans les ylabels de ligne → 2/2 PASS.\n- **N05** `plot_latent_interpolation` (l. 276-279) : labels A/B permutés → PASS.\n- **N06** `plot_loadings_family_bar` (l. 162-164) : légende PC1/PC2 permutée → PASS.\n\nLa matrice déclare ces appariements AP. Une légende qui affiche « G » sur des étoiles F est une figure scientifiquement fausse et visuellement convaincante.\n\n**Correction attendue :** suivre le modèle de `test_embedding_exact_observation_associations` :\n- classe du label == classe des points de chaque collection ;\n- ylabel de la colonne 0 == méthode de la géométrie ;\n- label du marqueur de départ == `label_a` ;\n- handle « PC1 » == conteneur des valeurs PC1.\n\n**Alternatives admissibles :** formulation, ordre des entrées et palette restent libres.\n\n---\n_Generated by [Claude Code](https://claude.ai/code)_" + } + ] + }, + { + "id": "PRRT_kwDOPIrQS862LHTm", + "is_resolved": false, + "path": "tests/test_dimred_visualizer.py", + "line": 615, + "comments": [ + { + "id": 4538039648, + "body": "**R5 — Important : l'export ne prouve pas que les données sont dessinées**\n\n**N03** : `_save` exporte un clone de la figure dont toutes les `collections` ont été retirées ; la figure en mémoire reste correcte. Résultat : 5/5 PASS, car `pixels.std() > 1` est satisfait par les axes, les graduations et le titre. M16 ne rejette que la figure entièrement vide.\n\n**Correction attendue :** comparer le PNG lu au rendu `fig.canvas.buffer_rgba()` au même dpi, ou exiger une différence avec le rendu d'une copie sans artistes de données.\n\n**Alternatives admissibles :** `print_figure` et backend libres (C02 passe toujours).\n\n---\n_Generated by [Claude Code](https://claude.ai/code)_" + } + ] + }, + { + "id": "PRRT_kwDOPIrQS862LHTs", + "is_resolved": false, + "path": "audit/M28_PROOFS.md", + "line": 73, + "comments": [ + { + "id": 4538039664, + "body": "**R6 — Important : adaptateurs grammaticaux (limite déclarée, désormais démontrée)**\n\n- **FD03** : titre « N = 43 019 » (effectif toujours codé en dur) → `hr_population_title` PASS.\n- **FD10** : annotation « → 85.0% avec 3 PCs » (association toujours fausse) → `truncated_variance_annotation` PASS **et** suite verte PASS.\n\n**Correction attendue :**\n- D03 : tout entier du titre (espaces fines admises) doit égaler n, ou ne pas apparaître ;\n- D10 : tout pourcentage affiché dans le panneau doit égaler la masse cumulée du nombre de PCs mentionné ou du point annoté (`annotation.xy`), quel que soit l'ordre des mots.\n\nNon bloquant, car la limite est explicitement écrite ici. #103 et #110 devraient toutefois décrire le contrat structurel.\n\n---\n_Generated by [Claude Code](https://claude.ai/code)_" + } + ] + }, + { + "id": "PRRT_kwDOPIrQS862LHT1", + "is_resolved": false, + "path": "audit/M28_PROOFS.md", + "line": 31, + "comments": [ + { + "id": 4538039679, + "body": "**R7 — Important : « without indication » contredit la preuve (D14, et D11 l. 28)**\n\n**AD14** : on conserve `ylim(0.75, 1.01)` et on ajoute un texte explicite « T(k) < 0.75 hors champ : min = 0.500 ». Résultat : `trustworthiness_axis_contains` FAIL. Le manifeste (et #114/#111) suggère pourtant qu'une indication explicite serait admissible.\n\n**Décision humaine requise :**\n- soit le contrat est « toutes les valeurs calculées sont visibles », et il faut corriger le texte du manifeste et des issues ;\n- soit il est « visibles ou explicitement signalées », et il faut élargir l'oracle.\n\nC11 (plage 0–1) passe dans les deux cas.\n\n---\n_Generated by [Claude Code](https://claude.ai/code)_" + } + ] + }, + { + "id": "PRRT_kwDOPIrQS862LHT8", + "is_resolved": false, + "path": "tests/test_dimred_visualizer.py", + "line": 528, + "comments": [ + { + "id": 4538039690, + "body": "**R8 — Important : couplage à l'implémentation**\n\n**A_TRUST** : un sous-échantillon apparié tout aussi valide, `np.sort(rng.permutation(n)[:k])`, fait échouer le cas `[9]`, parce que le test recopie `default_rng(42).choice` de la production.\n\n**Correction attendue :** enregistrer les sous-ensembles réellement passés à `sklearn.manifold.trustworthiness` (wrapper `monkeypatch`), vérifier l'appariement ligne à ligne, puis appliquer l'oracle de rangs à ces sous-ensembles. N10 (appariement rompu) doit rester tué ; il l'est aujourd'hui.\n\nÉgalement figés sans nécessité scientifique :\n- `clim == [1.12, 20.22]` (percentiles 2/98, l. 53) ;\n- libellés exacts « non disponible » (l. 478), « Prédit F (n=3) » (l. 496), « STAR (n=3, μ=5.3333) » (l. 345).\n\nPréférer des assertions sémantiques (classe, effectif, valeur numérique).\n\n---\n_Generated by [Claude Code](https://claude.ai/code)_" + } + ] + }, + { + "id": "PRRT_kwDOPIrQS862LHUD", + "is_resolved": false, + "path": "audit/M28_DIMRED_VISUALIZER.md", + "line": 94, + "comments": [ + { + "id": 4538039710, + "body": "**R9 — Important : `plot_hr_teff_regions` absent de la matrice**\n\nL'AST compte 38 méthodes pour 37 lignes ; la seule méthode absente est `plot_hr_teff_regions`. Elle est pourtant couverte par D02, D03 et `test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect`.\n\nPar ailleurs, **N08** (sur base C05 : polygone « Types A/B » déplacé du côté froid) passe la suite verte et les preuves. La géométrie en T_eff des régions n'est donc pas testée.\n\n**Correction attendue :** ajouter la ligne, avec un statut NA explicite pour la taxonomie et la géométrie des régions (astrophysiquement arbitraires) et un statut PA pour les marges et unités.\n\n---\n_Generated by [Claude Code](https://claude.ai/code)_" + } + ] + }, + { + "id": "PRRT_kwDOPIrQS862LHUO", + "is_resolved": false, + "path": "audit/M28_DIMRED_VISUALIZER.md", + "line": 93, + "comments": [ + { + "id": 4538039723, + "body": "**R10 — Important : angle mort, troncature puis renormalisation dans le panneau linéaire**\n\n`plot_ae_error_distribution_logscale` (L2837-2853) utilise `bins = linspace(0, 1.5·P99_STAR, 60)` avec `density=True`. Ma sonde : seuls 3 QSO sur 50 tombent dans la fenêtre, mais l'aire tracée vaut 1,000 et la médiane (5,287) est hors champ. Les 47 autres observations disparaissent sans indication ; le titre « (P99 étoiles) » ne signale pas la renormalisation.\n\nCe cas n'est couvert par aucune issue #101–#115 (#111 concerne les petites valeurs du panneau log). C'est un **défaut candidat P2**, à qualifier par le responsable scientifique avant toute issue ; une preuve rouge serait utile. Le test vert l. 349-351 vérifie aire = 1 sur une fixture non tronquée : il ne fige pas ce comportement.\n\n---\n_Generated by [Claude Code](https://claude.ai/code)_" + } + ] + }, + { + "id": "PRRT_kwDOPIrQS862LHUY", + "is_resolved": false, + "path": "audit/M28_PROOFS.md", + "line": 21, + "comments": [ + { + "id": 4538039739, + "body": "**R11 — Suggestion : commentaire D04 inexact (archive l. 149-151, reproduit dans #104)**\n\nLa ligne 4 retirée est un G. C'est la ligne 8 (F) qui est réattribuée à G par la troncature, pas la ligne 5 (qui est un G). Les valeurs 1140/13 et 1060/12, que j'ai recalculées, sont exactes. Le refus pertinent (C04) et le rejet de F01 restent valides.\n\n---\n_Generated by [Claude Code](https://claude.ai/code)_" + } + ] + } + ] +} diff --git a/audit/m28_review_validation_final_results.json b/audit/m28_review_validation_final_results.json new file mode 100644 index 0000000..5f2f429 --- /dev/null +++ b/audit/m28_review_validation_final_results.json @@ -0,0 +1,151 @@ +{ + "active_head": "0c06cfd497579c5f99fd957c97ca28a052494bd4", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "executable": "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "versions": { + "numpy": "2.4.6", + "pandas": "3.1.1", + "scipy": "1.17.1", + "scikit-learn": "1.9.1", + "matplotlib": "3.11.2", + "pytest": "8.4.2", + "black": "24.4.2", + "ruff": "0.5.0", + "pillow": "13.0.0" + }, + "effective_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3", + "audit/check_m28_evidence.py": "f0b8f438e79b3dc3ea5f42a6f6e530316bf93fd2a4ac9b848333e3c6c363188e", + "audit/check_m28_boundaries.py": "72f0c956c8719acafe0d9c07fa05e93c3f4d69ce297a8befeccef73bad4cdfb0", + "audit/check_m28_validation.py": "fda730977f875e9b951171a89e5e14d44ca0fa7524e2c7651e45d743bc581e1b", + "audit/check_m28_review.py": "52a5cfa9520110e21bbe265a8b78ccb448a8df1c236b64dbed6059ad2a88aad3" + }, + "commands": [ + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-W", + "error", + "--junitxml=test-results/m28-targeted-validation.xml" + ], + "exit_code": 0, + "stdout": "............................................................ [100%]\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-targeted-validation.xml -\n60 passed in 7.63s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "--junitxml=test-results/m28-complete-validation.xml" + ], + "exit_code": 0, + "stdout": "........................................................................ [ 10%]\n........................................................................ [ 20%]\n........................................................................ [ 31%]\n........................................................................ [ 41%]\n........................................................................ [ 52%]\n........................................................................ [ 62%]\n........................................................................ [ 72%]\n........................................................................ [ 83%]\n........................................................................ [ 93%]\n............................................ [100%]\n============================== warnings summary ===============================\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_partial_esa_supplement_merges_without_losing_xmatch_rows\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_bulk_without_matches_stops_auto_fallback\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_cone_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_retry_limit_raises_or_falls_back_by_mode\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_transient_failure_retries_then_succeeds\n C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\tools\\gaia_crossmatcher.py:1210: Pandas4Warning: The inplace keyword in DataFrame.drop is deprecated and will be removed in a future version (PDEP-8).\n See https://pandas.pydata.org/docs/dev/whatsnew/v3.1.0.html#deprecation-inplace for more details.\n df_merged.drop(columns=[\"objid\"], inplace=True, errors=\"ignore\")\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-complete-validation.xml -\n692 passed, 62 deselected, 7 warnings in 23.00s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "--import-mode=importlib", + "--junitxml=test-results/m28-importlib-validation.xml" + ], + "exit_code": 0, + "stdout": "........................................................................ [ 10%]\n........................................................................ [ 20%]\n........................................................................ [ 31%]\n........................................................................ [ 41%]\n........................................................................ [ 52%]\n........................................................................ [ 62%]\n........................................................................ [ 72%]\n........................................................................ [ 83%]\n........................................................................ [ 93%]\n............................................ [100%]\n============================== warnings summary ===============================\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_partial_esa_supplement_merges_without_losing_xmatch_rows\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_bulk_without_matches_stops_auto_fallback\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_cone_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_retry_limit_raises_or_falls_back_by_mode\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_transient_failure_retries_then_succeeds\n C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\tools\\gaia_crossmatcher.py:1210: Pandas4Warning: The inplace keyword in DataFrame.drop is deprecated and will be removed in a future version (PDEP-8).\n See https://pandas.pydata.org/docs/dev/whatsnew/v3.1.0.html#deprecation-inplace for more details.\n df_merged.drop(columns=[\"objid\"], inplace=True, errors=\"ignore\")\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-importlib-validation.xml -\n692 passed, 62 deselected, 7 warnings in 23.24s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "black", + "--check", + "src", + "tests", + "scripts", + "app.py", + "audit/check_m28_evidence.py", + "audit/check_m28_boundaries.py", + "audit/check_m28_validation.py", + "audit/check_m28_review.py" + ], + "exit_code": 0, + "stdout": "", + "stderr": "All done! \u2728 \ud83c\udf70 \u2728\n48 files would be left unchanged.\n" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "ruff", + "check", + "src", + "tests", + "scripts", + "app.py", + "audit/check_m28_evidence.py", + "audit/check_m28_boundaries.py", + "audit/check_m28_validation.py", + "audit/check_m28_review.py" + ], + "exit_code": 0, + "stdout": "All checks passed!\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pip", + "check" + ], + "exit_code": 0, + "stdout": "No broken requirements found.\n", + "stderr": "" + }, + { + "command": [ + "git", + "diff", + "--check" + ], + "exit_code": 0, + "stdout": "", + "stderr": "" + }, + { + "command": [ + "git", + "diff", + "--exit-code", + "39dad874610745ccd456d26972e90f6fb3a11405", + "--", + "src", + "notebooks", + "data", + "models", + "requirements", + "pyproject.toml", + ".github", + "app.py", + "AGENTS.md" + ], + "exit_code": 0, + "stdout": "", + "stderr": "" + } + ], + "all_commands_passed": true +} diff --git a/audit/m28_review_validation_results.json b/audit/m28_review_validation_results.json new file mode 100644 index 0000000..743ebe9 --- /dev/null +++ b/audit/m28_review_validation_results.json @@ -0,0 +1,147 @@ +{ + "active_head": "4364c61f56d91f7ec93c5c6072b9f88c46023241", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "executable": "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "versions": { + "numpy": "2.4.6", + "pandas": "3.1.1", + "scipy": "1.17.1", + "scikit-learn": "1.9.1", + "matplotlib": "3.11.2", + "pytest": "8.4.2", + "black": "24.4.2", + "ruff": "0.5.0", + "pillow": "13.0.0" + }, + "effective_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/test_dimred_visualizer.py": "7fd6d4164a9bd50a52e3a47e79eef197c7963dcc6cd5e96be4231383e7ca3a25", + "tests/visualizer_review_contracts.py": "d5f32c448429d5b5cc3ee61147de276cf4482bf91fea9331ca8d000f45c6f28d", + "tests/test_visualizer_review_contracts.py": "13dfd99e98fb4304c79fa57627e7466e29135f558c3b4a0b11cd5651b5c47be3" + }, + "commands": [ + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-W", + "error", + "--junitxml=test-results/m28-targeted-validation.xml" + ], + "exit_code": 0, + "stdout": "............................................................ [100%]\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-targeted-validation.xml -\n60 passed in 8.18s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "--junitxml=test-results/m28-complete-validation.xml" + ], + "exit_code": 0, + "stdout": "........................................................................ [ 10%]\n........................................................................ [ 20%]\n........................................................................ [ 31%]\n........................................................................ [ 41%]\n........................................................................ [ 52%]\n........................................................................ [ 62%]\n........................................................................ [ 72%]\n........................................................................ [ 83%]\n........................................................................ [ 93%]\n............................................ [100%]\n============================== warnings summary ===============================\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_partial_esa_supplement_merges_without_losing_xmatch_rows\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_bulk_without_matches_stops_auto_fallback\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_cone_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_retry_limit_raises_or_falls_back_by_mode\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_transient_failure_retries_then_succeeds\n C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\tools\\gaia_crossmatcher.py:1210: Pandas4Warning: The inplace keyword in DataFrame.drop is deprecated and will be removed in a future version (PDEP-8).\n See https://pandas.pydata.org/docs/dev/whatsnew/v3.1.0.html#deprecation-inplace for more details.\n df_merged.drop(columns=[\"objid\"], inplace=True, errors=\"ignore\")\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-complete-validation.xml -\n692 passed, 62 deselected, 7 warnings in 29.08s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "--import-mode=importlib", + "--junitxml=test-results/m28-importlib-validation.xml" + ], + "exit_code": 0, + "stdout": "........................................................................ [ 10%]\n........................................................................ [ 20%]\n........................................................................ [ 31%]\n........................................................................ [ 41%]\n........................................................................ [ 52%]\n........................................................................ [ 62%]\n........................................................................ [ 72%]\n........................................................................ [ 83%]\n........................................................................ [ 93%]\n............................................ [100%]\n============================== warnings summary ===============================\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_partial_esa_supplement_merges_without_losing_xmatch_rows\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_bulk_without_matches_stops_auto_fallback\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_cone_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_retry_limit_raises_or_falls_back_by_mode\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_transient_failure_retries_then_succeeds\n C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\tools\\gaia_crossmatcher.py:1210: Pandas4Warning: The inplace keyword in DataFrame.drop is deprecated and will be removed in a future version (PDEP-8).\n See https://pandas.pydata.org/docs/dev/whatsnew/v3.1.0.html#deprecation-inplace for more details.\n df_merged.drop(columns=[\"objid\"], inplace=True, errors=\"ignore\")\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-importlib-validation.xml -\n692 passed, 62 deselected, 7 warnings in 24.82s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "black", + "--check", + "src", + "tests", + "scripts", + "app.py", + "audit/check_m28_evidence.py", + "audit/check_m28_boundaries.py", + "audit/check_m28_validation.py", + "audit/check_m28_review.py" + ], + "exit_code": 0, + "stdout": "", + "stderr": "All done! \u2728 \ud83c\udf70 \u2728\n48 files would be left unchanged.\n" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "ruff", + "check", + "src", + "tests", + "scripts", + "app.py", + "audit/check_m28_evidence.py", + "audit/check_m28_boundaries.py", + "audit/check_m28_validation.py", + "audit/check_m28_review.py" + ], + "exit_code": 0, + "stdout": "All checks passed!\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pip", + "check" + ], + "exit_code": 0, + "stdout": "No broken requirements found.\n", + "stderr": "" + }, + { + "command": [ + "git", + "diff", + "--check" + ], + "exit_code": 0, + "stdout": "", + "stderr": "warning: in the working copy of 'tests/test_dimred_visualizer.py', LF will be replaced by CRLF the next time Git touches it\n" + }, + { + "command": [ + "git", + "diff", + "--exit-code", + "39dad874610745ccd456d26972e90f6fb3a11405", + "--", + "src", + "notebooks", + "data", + "models", + "requirements", + "pyproject.toml", + ".github", + "app.py", + "AGENTS.md" + ], + "exit_code": 0, + "stdout": "", + "stderr": "" + } + ], + "all_commands_passed": true +} diff --git a/tests/proofs_dimred_visualizer.py b/tests/proofs_dimred_visualizer.py index cba8f04..d77396a 100644 --- a/tests/proofs_dimred_visualizer.py +++ b/tests/proofs_dimred_visualizer.py @@ -341,7 +341,7 @@ def test_log_histogram_keeps_small_positive_errors( call = next(call for call in calls if call["ax"] is axes[1]) missing, edges = visualizer_contracts.assert_histogram_population(call, errors) assert missing == 0 or visualizer_contracts.exclusion_report( - axes[1], "STAR", missing, 6, edges + axes[1], "STAR", missing, 6, edges, errors ), "Positive MSE population silently truncated" @@ -456,5 +456,5 @@ def test_linear_histogram_truncation_discloses_population( area = sum(p.get_width() * p.get_height() for p in call["result"][2]) assert_allclose(area, 1) assert missing == 0 or visualizer_contracts.exclusion_report( - axes[0], "QSO", missing, 50, edges + axes[0], "QSO", missing, 50, edges, qso ), f"Silent conditional histogram: represented={50-missing}/50, area={area}, median={np.median(qso)}" diff --git a/tests/test_visualizer_review_contracts.py b/tests/test_visualizer_review_contracts.py index 596d5ae..4418a48 100644 --- a/tests/test_visualizer_review_contracts.py +++ b/tests/test_visualizer_review_contracts.py @@ -69,3 +69,23 @@ def test_categorical_legend_maps_ids_to_actual_data_colors( visualizer_contracts.assert_cluster_encoding(fig, ax, labels, c.Z) else: visualizer_contracts.assert_cluster_encoding(fig, ax, labels, c.Z) + + +def test_histogram_disclosure_identifies_the_relevant_exclusion_bound( + visualizer_case, visualizer_contracts +): + _, ax = visualizer_case.plt.subplots() + values = np.array([0.04, 0.09, 0.1, 4.0, 7.0]) + for message, admitted in [ + ("QSO: excluded 2 of 5 above 0.15", True), + ("QSO: excluded 2 of 5 outside 0", False), + ("QSO: excluded 2 of 50 above 0.15", False), + ("Warning: QSO clipped", False), + ]: + for artist in list(ax.texts): + artist.remove() + ax.text(0.1, 0.1, message) + assert ( + visualizer_contracts.exclusion_report(ax, "QSO", 2, 5, [0.0, 0.15], values) + == admitted + ), message diff --git a/tests/visualizer_review_contracts.py b/tests/visualizer_review_contracts.py index 03bc6b4..99f1a07 100644 --- a/tests/visualizer_review_contracts.py +++ b/tests/visualizer_review_contracts.py @@ -142,8 +142,14 @@ def assert_histogram_population(call, expected): return missing, edges -def exclusion_report(ax, cls, missing, total, edges): - """Bounded disclosure: population, excluded/total counts and support bound.""" +def exclusion_report(ax, cls, missing, total, edges, values=None): + """Require population/count and the bound actually crossed by excluded data.""" + bounds = [edges[0], edges[-1]] + if values is not None: + values = np.asarray(values) + bounds = ([edges[0]] if np.any(values < edges[0]) else []) + ( + [edges[-1]] if np.any(values > edges[-1]) else [] + ) for artist in ax.texts: label = artist.get_text() if not tokens(label).intersection( @@ -152,9 +158,9 @@ def exclusion_report(ax, cls, missing, total, edges): continue vals = numbers(label) if cls.casefold() in tokens(label) and missing in vals and total in vals: - if any( - any(abs(v - bound) <= max(5e-4, abs(bound) * 0.005) for v in vals) - for bound in [edges[0], edges[-1]] + if bounds and all( + any(abs(v - bound) <= max(5e-7, abs(bound) * 0.005) for v in vals) + for bound in bounds ): return True return False From e924f36f24412a435f5ca54a95cdfad914835ff2 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Fri, 13 Nov 2026 12:09:13 -0500 Subject: [PATCH 6/8] docs(dimred): record verified M2.8 archive and green replay --- audit/M28_DIMRED_VISUALIZER.md | 15 +- audit/M28_REVIEW_PROOFS.md | 51 +- audit/m28_review_archive_verification.json | 47 + ...m28_review_green_joint_replay_results.json | 5170 +++++++++++++++++ .../m28_review_green_red_replay_results.json | 1245 ++++ .../m28_review_green_validation_results.json | 151 + tests/proofs_dimred_visualizer.py | 460 -- 7 files changed, 6650 insertions(+), 489 deletions(-) create mode 100644 audit/m28_review_archive_verification.json create mode 100644 audit/m28_review_green_joint_replay_results.json create mode 100644 audit/m28_review_green_red_replay_results.json create mode 100644 audit/m28_review_green_validation_results.json delete mode 100644 tests/proofs_dimred_visualizer.py diff --git a/audit/M28_DIMRED_VISUALIZER.md b/audit/M28_DIMRED_VISUALIZER.md index 6fb6e68..1a1c6a9 100644 --- a/audit/M28_DIMRED_VISUALIZER.md +++ b/audit/M28_DIMRED_VISUALIZER.md @@ -8,11 +8,12 @@ preserved. Production blob **624b857bca5833c3401204b0a592b9ae6ffc2902**. Actual inventory: **38 methods**, including initializer and two helpers, not31. Entire3224-line source read. AGENTS v1.3 fetched from current main. -## Revision after Claude review 5858927009 ? 2026-11-13 +## Revision after Claude review 5858927009 - 2026-11-13 This revision resumes PR #116 at `4364c61f56d91f7ec93c5c6072b9f88c46023241`; all first-pass results below remain historical. Production and the original -archive `ed1d91ec0efb619aeb77a5bf7e4a0ab43fa84cac` are unchanged. The current +archive `ed1d91ec0efb619aeb77a5bf7e4a0ab43fa84cac` are unchanged. New immutable red archive: **a8bc8506804cf4c89e784e458498d3f229ca81cb**, tag +`audit/m28-review-proofs-2026-11-13`; the old archive is retained. The current review manifest is [M28_REVIEW_PROOFS.md](M28_REVIEW_PROOFS.md). The 53 original green nodes remain; eight adapter controls are added. No production fix is part of these tests. All twelve GitHub threads remain reviewer-owned. @@ -27,7 +28,7 @@ part of these tests. All twelve GitHub threads remain reviewer-owned. | R6 | Population annotations accept grouped numbers and N= wording; variance annotations link PC count and full-model cumulative variance in either word order. Omission of a questionable claim remains admissible. | | R7 | Full visibility OR a verifiable disclosure with actual excluded population/count/support or curve boundary/extreme. Generic warnings and false numbers fail. Zero/negative/nonfinite histogram policies remain open. | | R8 | Capture real sklearn subsets, recover supplied observation rows and check pairing, independent ranks, values and repeatability. A paired permutation sampler is admissible; no particular RNG choice sequence is required. | -| R9 | Inventory corrected to 38/38 below. HR missing-column sentinel AP; provided-data scatter/orientation and dimensional region geometry PA; astrophysical region taxonomy/boundaries NA. | +| R9 | Inventory corrected to 38/38 below. HR supplied-data scatter/color/orientation and missing-column sentinel AP; dimensional region geometry PA; astrophysical region taxonomy/boundaries NA. | | R10 | Independently reproduced linear conditional-density clipping: QSO 3/50 retained, area 1. New characterization and a P2 issue proposal only; distinct from #111 log floor. No new issue created. | | R11/R12 | D04 reassigns original F row 8, not row 5. Corrected issue anchors #103:3215, #104:2588, #105:1415/1560, #110:185/186, #111:2824, #114:2279 at the unchanged base SHA, with dated documentary notes. | | R13 | Six mh_gspphot -> Fe/H labels (437/616/1100/2311/2455/2892) remain PA interpretation, not a validated abundance conversion. Fixed 3-PC/183-feature/min_size300 titles and anomaly prose also PA; #65/#78 retain policy ownership. | @@ -52,7 +53,7 @@ are rejected; PDF scientific rendering and cross-version agreement remain PA. Current validation: **61 dedicated PASS with -W error**, complete default, importlib and reversed suites **693 PASS / 62 deselected / 7 preexisting Gaia warnings**. Dedicated reversed and shuffled orders (3/11/29) each 61 PASS. -Original M01?M16: **16 KILLED**; original C01?C14: **14 PASS** and F01?F03: +Original M01-M16: **16 KILLED**; original C01-C14: **14 PASS** and F01-F03: **3 KILLED**. Review campaign: **19 KILLED**, **12 admissible controls PASS**, and **87/87 joint PASS**, with zero surviving/inconclusive current candidates. Revised red baseline: **25 FAIL / 1 PASS**, 26 cases. This is evidence on bounded @@ -121,7 +122,7 @@ limited existing boundaries, not previous coverage of every figure. | `plot_stability` | ordered report -> bars/reference-excluded mean -> `(fig,ax)` | actual producer with controlled fit; asymmetric mean | AP producer order0..N-1; arbitrary reordered reports PA; stability not astrophysics | | `plot_reconstruction_error` | PCA summary -> mean±SD+elbow -> `(fig,ax)` | actual discarded-energy MSE and band | AP statistics; nonuniform count elbow heuristic PA; log zero hidden | | `plot_eigenspectra` | PCA vectors/wavelength -> line+markers -> `(fig,axes)` | exact wavelength/values/in-range markers,1/3/10 requested | AP custom marker path; default mathtext and fixed3-PC title PA | -| `plot_hr_teff_regions` | supplied Teff(K)/log g(dex) -> scatter + illustrative polygons -> `(fig,ax)` | green missing-column sentinel; D02 input-domain geometry and D03 actual population | AP missing-column sentinel only; PA supplied scatter/orientation and dimensional polygon envelope; NA stellar taxonomy and astrophysical delimitations (including N08) | +| `plot_hr_teff_regions` | supplied Teff(K)/log g(dex) -> scatter + illustrative polygons -> `(fig,ax)` | green `hr_regions_scatter_preserves_input_triplets_despite_geometry_defect` and missing-column sentinel; D02 input-domain geometry and D03 actual population | AP supplied numeric triplets/color/orientation and sentinel; PA dimensional polygon envelope; NA stellar taxonomy and astrophysical delimitations (including N08) | | `plot_hr_diagram_embedding` | meta/Z component -> finite triplets -> `(fig,ax)` | missing on distinct rows, two axes, units/inversion | AP provided values; actual stellar stages NA | | `plot_training_history` | train/val/LR -> curves/best epoch -> `(fig,axes)` | nonlast minimum, distinct series, real explicit export | AP numeric; direct output_dir mismatch red; train-loss semantics #84 | | `plot_ae_embedding` | 2D Z/y/meta -> class+physical panels -> `(fig,axes)` | coherent row permutation/missing physical row | AP nominal; no-physical scalar axes red | @@ -181,7 +182,7 @@ GPU/W&B/network, visual publication review, cross-version image/PDF agreement, all filesystem failures, notebook execution and line coverage. No claim of historical figure corruption without its actual run artifact. -## First-pass delivery ? historical results before Claude review +## First-pass delivery - historical results before Claude review **53 dedicated green cases**, actual Windows/Python3.11.9 execution: [validation ledger](m28_validation_results.json). Normal and importlib full @@ -301,7 +302,7 @@ at the consumer and linked to #90/#106, not claimed as calibrated probabilities. Collinear/two-point backend acceptance can depend on floating covariance; no successful density computation alone certifies a meaningful2D population. -### First-pass questions for Claude ? historical +### First-pass questions for Claude - historical Challenge numerical oracles and adapter limits first: KDE grid tails and label meaning; mismatched population refusal versus information unavailable to the diff --git a/audit/M28_REVIEW_PROOFS.md b/audit/M28_REVIEW_PROOFS.md index c9f9a2b..efa6018 100644 --- a/audit/M28_REVIEW_PROOFS.md +++ b/audit/M28_REVIEW_PROOFS.md @@ -1,4 +1,4 @@ -# M2.8 ? revised evidence after Claude review 5858927009 +# M2.8 - revised evidence after Claude review 5858927009 Revision date: 2026-11-13. Refs #43 / Draft PR #116. Same worktree `AstroSpectro-m28`, same branch `audit/43-dimred-visualizer`; production blob @@ -10,15 +10,20 @@ Revision date: 2026-11-13. Refs #43 / Draft PR #116. Same worktree - Original archive **ed1d91ec0efb619aeb77a5bf7e4a0ab43fa84cac**, original ref `audit/43-dimred-visualizer-proofs`, preserved byte-for-byte. Historical baseline: 22 cases, 21 FAIL / 1 PASS. The first-pass JSON ledgers are unchanged. -- Revised archive is designated by immutable tag - `audit/m28-review-proofs-2026-11-13` (full SHA recorded in the subsequent green - manifest and PR #116), read back from GitHub before normal - removal of `tests/proofs_dimred_visualizer.py` from the green head. +- Revised archive **a8bc8506804cf4c89e784e458498d3f229ca81cb**, + immutable tag `audit/m28-review-proofs-2026-11-13`. Seven archived files were + read back from GitHub and their Git blob IDs verified before normal removal of `tests/proofs_dimred_visualizer.py` from the green head. - The revised baseline is **26 cases: 25 FAIL / 1 PASS / 0 ERROR / 0 SKIP**, executed in [baseline ledger](m28_review_frozen_controls_results.json). - These are the original D01?D15 groups plus one R10 characterization, not + These are the original D01-D15 groups plus one R10 characterization, not 25 independent bugs. The passing profile `n_show=0` refusal remains a control. +[Archive verification](m28_review_archive_verification.json) records GitHub +blob IDs, preservation of all first-pass JSON files, original-archive ancestry +and unchanged production. [Red reconstruction replay](m28_review_green_red_replay_results.json) +and [joint reconstruction replay](m28_review_green_joint_replay_results.json) +restore exact archived bytes after the proof is removed from the green head. + ## Changes to the proof contracts D01 expands two cases to five: real Gaussian, analytic Gaussian, three @@ -115,13 +120,13 @@ pytest 8.4.2, Pillow 13.0.0; Agg rendering and sockets blocked by test setup. | Execution | Actual result / ledger | |---|---| | Original 53 node IDs | All retained; 8 new adapter nodes, 61 total | -| Targeted `-W error` | 61 PASS ? [frozen validation](m28_review_frozen_validation_results.json) | -| Complete default/importlib suite | Each 693 PASS / 62 deselected / 7 preexisting Gaia warnings ? same ledger | -| Complete reversed/hashseed 7 | 693 PASS / 62 deselected / 7 warnings ? [order ledger](m28_review_frozen_order_results.json) | -| Targeted reversed + shuffle seeds 3/11/29, `-W error` | Each 61 PASS ? same order ledger | -| Black `--check`, Ruff, pip check, diff/check and protected paths | PASS, including all four M2.8 audit scripts ? frozen validation ledger | -| M01?M16 | 16 KILLED / 0 SURVIVED / 0 inconclusive, baseline 61 PASS ? [frozen mutations](m28_review_frozen_mutations_results.json) | -| Old archive replay | 21 FAIL / 1 PASS / 0 ERROR/SKIP ? [old archive verification](m28_review_old_archive_integrity_results.json) | +| Targeted `-W error` | 61 PASS - [frozen validation](m28_review_frozen_validation_results.json) | +| Complete default/importlib suite | Each 693 PASS / 62 deselected / 7 preexisting Gaia warnings - same ledger | +| Complete reversed/hashseed 7 | 693 PASS / 62 deselected / 7 warnings - [order ledger](m28_review_frozen_order_results.json) | +| Targeted reversed + shuffle seeds 3/11/29, `-W error` | Each 61 PASS - same order ledger | +| Black `--check`, Ruff, pip check, diff/check and protected paths | PASS, including all four M2.8 audit scripts - frozen validation ledger | +| M01-M16 | 16 KILLED / 0 SURVIVED / 0 inconclusive, baseline 61 PASS - [frozen mutations](m28_review_frozen_mutations_results.json) | +| Old archive replay | 21 FAIL / 1 PASS / 0 ERROR/SKIP - [old archive verification](m28_review_old_archive_integrity_results.json) | Review campaign: **19 KILLED / 0 SURVIVED / 0 inconclusive** for incorrect candidates; **12 admissible controls PASS**, plus **87/87 PASS** for the joint @@ -154,7 +159,7 @@ The review-specific frozen campaign is recorded in [m28_review_frozen_results.json](m28_review_frozen_results.json). It includes actual pre-patch baselines, all edited statement anchors, matching collections, assertion texts, exact candidate patches, tested hashes and a protected-input -guard. The original C01?C14 and F01?F03 are replayed separately in +guard. The original C01-C14 and F01-F03 are replayed separately in [m28_review_frozen_controls_results.json](m28_review_frozen_controls_results.json). C13 additionally completes the display domain for the polygon contract; this revision does not alter its broad-grid probability algorithm. Earlier C13-only @@ -172,9 +177,9 @@ python audit/check_m28_evidence.py --mode proofs --output test-results/m28-contr From the green checkout, use the immutable archive SHA below with: ```powershell -python audit/check_m28_evidence.py --mode baseline --proofs-ref --output test-results/m28-red-replay.json -python audit/check_m28_review.py --proofs-ref --output test-results/m28-review-replay.json -python audit/check_m28_review.py --proofs-ref --only JOINT --output test-results/m28-joint.json +python audit/check_m28_evidence.py --mode baseline --proofs-ref a8bc8506804cf4c89e784e458498d3f229ca81cb --output test-results/m28-red-replay.json +python audit/check_m28_review.py --proofs-ref a8bc8506804cf4c89e784e458498d3f229ca81cb --output test-results/m28-review-replay.json +python audit/check_m28_review.py --proofs-ref a8bc8506804cf4c89e784e458498d3f229ca81cb --only JOINT --output test-results/m28-joint.json ``` The runners reconstruct exact archived tests/fixtures/helpers in disposable @@ -188,11 +193,11 @@ configured checks are recorded in the updated PR #116 and #43 handoff after the new green head is pushed. Old CI run 42952227591 is first-pass history only. CI does not execute the explicit red proofs or mutation campaigns. -## R10 ? separate corrective issue proposal, awaiting human decision +## R10 - separate corrective issue proposal, awaiting human decision **Proposed title:** `fix: disclose population excluded from linear error histograms` -**Probl?me:** at the unchanged production base, line 2833 sets the linear +**Problème:** at the unchanged production base, line 2833 sets the linear histogram support to `[0, 1.5*P99(STAR)]`; `density=True` normalizes only retained samples. Supply STAR=`linspace(.01,.1,40)`, QSO=`[.04,.09,.1] + linspace(4,7,47)`. Upper support .14865 retains **3 of 50 QSO**, drops **47**, and still has **area 1**; @@ -208,7 +213,7 @@ no historical astronomical run/publication impact is established. which class, how many excluded out of its total and the support used. Conditional normalization is admissible when that limitation is explicitly informative. -**V?rification:** run the archived R10 selection. A_HIST full-support alternative +**Vérification:** run the archived R10 selection. A_HIST full-support alternative and AD_HIST exact exclusion disclosure are positive controls. The original production fails by the meaningful 3/50 assertion, not a runtime error. @@ -223,8 +228,10 @@ No matching separate issue found in these searches; **no new issue created**. ## Residual scope and second review -The method table now contains all 38 actual methods. AP denotes only tested -numeric contracts; regional geometry is PA and astrophysical taxonomy NA. +The method table now contains all 38 actual methods. AP includes the existing +`hr_regions_scatter_preserves_input_triplets_despite_geometry_defect` numeric +triplets/color/orientation and missing-column sentinel; regional margins are PA +and astrophysical region geometry/taxonomy NA. N08's hot/cold taxonomy shift is not claimed rejected. Historical N09 exception failure is not promoted to a fresh assertion-based scientific kill. Metallicity mh_gspphot versus Fe/H, fixed 3-PC/183-feature/min_size300 prose and anomaly diff --git a/audit/m28_review_archive_verification.json b/audit/m28_review_archive_verification.json new file mode 100644 index 0000000..5462b32 --- /dev/null +++ b/audit/m28_review_archive_verification.json @@ -0,0 +1,47 @@ +{ + "archive": "a8bc8506804cf4c89e784e458498d3f229ca81cb", + "tag": "audit/m28-review-proofs-2026-11-13", + "original_archive": "ed1d91ec0efb619aeb77a5bf7e4a0ab43fa84cac", + "base": "39dad874610745ccd456d26972e90f6fb3a11405", + "github_files_read_before_proof_removal": [ + { + "path": "tests/proofs_dimred_visualizer.py", + "sha": "d77396ae9d7aeabafdd014b0934a008ed664af7a", + "url": "https://github.com/PhD-Brown/AstroSpectro/blob/a8bc8506804cf4c89e784e458498d3f229ca81cb/tests/proofs_dimred_visualizer.py" + }, + { + "path": "tests/visualizer_review_contracts.py", + "sha": "99f1a07581c7841bac5bdd1f719e8d7f3bedb7e7", + "url": "https://github.com/PhD-Brown/AstroSpectro/blob/a8bc8506804cf4c89e784e458498d3f229ca81cb/tests/visualizer_review_contracts.py" + }, + { + "path": "tests/test_dimred_visualizer.py", + "sha": "1de00d18d05197962ce9fccf8540cdbb2167eca8", + "url": "https://github.com/PhD-Brown/AstroSpectro/blob/a8bc8506804cf4c89e784e458498d3f229ca81cb/tests/test_dimred_visualizer.py" + }, + { + "path": "tests/test_visualizer_review_contracts.py", + "sha": "4418a485f51aedb35b451d866167e204deddfe39", + "url": "https://github.com/PhD-Brown/AstroSpectro/blob/a8bc8506804cf4c89e784e458498d3f229ca81cb/tests/test_visualizer_review_contracts.py" + }, + { + "path": "tests/conftest.py", + "sha": "0d44271a44abc9b8a55be3383d8a42bc58910ff6", + "url": "https://github.com/PhD-Brown/AstroSpectro/blob/a8bc8506804cf4c89e784e458498d3f229ca81cb/tests/conftest.py" + }, + { + "path": "audit/check_m28_review.py", + "sha": "cefd7bb48b956ca44a7755d8ad8c3b0aa58af703", + "url": "https://github.com/PhD-Brown/AstroSpectro/blob/a8bc8506804cf4c89e784e458498d3f229ca81cb/audit/check_m28_review.py" + }, + { + "path": "audit/M28_REVIEW_PROOFS.md", + "sha": "c9f9a2bb6771ef1dcec2d4a14aa57dda543283c8", + "url": "https://github.com/PhD-Brown/AstroSpectro/blob/a8bc8506804cf4c89e784e458498d3f229ca81cb/audit/M28_REVIEW_PROOFS.md" + } + ], + "old_archive_ancestor": true, + "historical_json_unchanged": true, + "historical_json_files_checked": 61, + "production_blob": "624b857bca5833c3401204b0a592b9ae6ffc2902" +} diff --git a/audit/m28_review_green_joint_replay_results.json b/audit/m28_review_green_joint_replay_results.json new file mode 100644 index 0000000..726377c --- /dev/null +++ b/audit/m28_review_green_joint_replay_results.json @@ -0,0 +1,5170 @@ +{ + "active_head": "a8bc8506804cf4c89e784e458498d3f229ca81cb", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "working_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "d0b744c8b12e6d7d22923691bcac15f5d03b00d946941cf641b124421a2767ea", + "tests/test_visualizer_review_contracts.py": "17163a01b61f7497d12e4c313e6870ac31c75314301323b07c76d30e0e3dbd9b" + }, + "proofs_ref": "a8bc8506804cf4c89e784e458498d3f229ca81cb", + "runner_lf_sha256": "1691981d66db6f38b7d66743d648820bde9d3389f30f42f17b65bc06dc6afadd", + "runs": [ + { + "name": "JOINT", + "selection": "", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 154 + ], + [ + 185 + ], + [ + 288 + ], + [ + 869 + ], + [ + 1018 + ], + [ + 1087 + ], + [ + 1110 + ], + [ + 1178, + 1179 + ], + [ + 1252 + ], + [ + 1319 + ], + [ + 1414 + ], + [ + 1559 + ], + [ + 2019 + ], + [ + 2040 + ], + [ + 2068 + ], + [ + 2278 + ], + [ + 2320 + ], + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2527, + 2528 + ], + [ + 2816 + ], + [ + 2827, + 2828, + 2829 + ], + [ + 3035 + ], + [ + 3209 + ] + ], + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, 100 * ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"{n_thresh} PCs\\n\u2192 {pca_analyzer.explained_variance_ratio[:n_thresh].sum()*100:.1f}%\",\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n@@ -285,7 +285,7 @@\n df = df.sort_values(\"loading\")\n \n # Couleur encodant le signe physique de la contribution.\n- colors = [\"#DD8452\" if v < 0 else \"#4C72B0\" for v in df[\"loading\"]]\n+ colors = [\"#CC5500\" if v < 0 else \"#0055CC\" for v in df[\"loading\"]]\n fig, ax = plt.subplots(figsize=(8, max(4, n_top * 0.35)), dpi=self.dpi)\n \n ax.barh(\n@@ -869,7 +869,7 @@\n ax.text(\n lam,\n ymax * 0.88,\n- nom,\n+ nom.replace(chr(92)*2, chr(92)),\n rotation=90,\n fontsize=6,\n color=\"crimson\",\n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ fig.canvas.print_figure(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n@@ -1084,9 +1084,7 @@\n \"Autoencodeur \u2014 Historique d'entra\u00eenement (LAMOST DR5)\", fontsize=13, y=1.02\n )\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_training_history\")\n return fig, axes\n \n def plot_ae_embedding(self, Z, meta, y, save_path=None):\n@@ -1109,6 +1107,7 @@\n \n PALETTE = {\"STAR\": \"#4C72B0\", \"GALAXY\": \"#DD8452\", \"QSO\": \"#55A868\"}\n MARKERS = {\"STAR\": \"o\", \"GALAXY\": \"s\", \"QSO\": \"^\"}\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -1176,6 +1175,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in axes[len(idx):]:\n+ unused.set_visible(False)\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n@@ -1248,9 +1249,7 @@\n ax.legend(fontsize=9)\n ax.grid(True, alpha=0.3)\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_ae_vs_pca\")\n return fig, ax\n \n def plot_latent_interpolation(\n@@ -1317,7 +1316,7 @@\n classes = np.unique(y)\n palette = [\"#4C72B0\", \"#DD8452\", \"#55A868\", \"#C44E52\"]\n fig, ax = plt.subplots(figsize=(9, 5), dpi=self.dpi)\n- for cls, color in zip(classes, palette):\n+ for cls, color in zip(classes, palette*((len(classes)+len(palette)-1)//len(palette))):\n mask = y == cls\n vals = mse_per_sample[mask]\n # Histogrammes normalis\u00e9s pour comparer les formes de distribution.\n@@ -1413,7 +1412,7 @@\n ),\n )\n sm = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n@@ -1558,7 +1557,7 @@\n )\n ax.grid(True, alpha=0.2)\n sm2 = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm2.set_array([])\n plt.colorbar(\n@@ -2017,7 +2016,7 @@\n ncols = 4\n nrows = (n_show + ncols - 1) // ncols\n fig, axes = plt.subplots(nrows, ncols, figsize=(5 * ncols, 4 * nrows), dpi=120)\n- axes_flat = axes.flatten() if n_show > 1 else [axes]\n+ axes_flat = np.asarray(axes).ravel()\n \n for ax_i, cid in zip(axes_flat, top_cids):\n profile = cluster_means.loc[cid]\n@@ -2038,7 +2037,7 @@\n ax_i.set_xlabel(\"Score moyen (\u03c3)\", fontsize=8)\n ax_i.grid(axis=\"x\", alpha=0.3)\n ax_i.set_xlim(-3, 3)\n- for ax_i in axes_flat[n_show:]:\n+ for ax_i in axes_flat[len(top_cids):]:\n ax_i.axis(\"off\")\n fig.suptitle(\n \"Top-5 features caract\u00e9ristiques par cluster HDBSCAN\\n\"\n@@ -2066,7 +2065,7 @@\n \n # V\u00e9rifie si une vraie probabilit\u00e9 est disponible.\n classes_pred = sorted(set(y_pred))\n- has_proba = confidence is not None and not np.all(confidence == 1.0)\n+ has_proba = confidence is not None\n fig, axes = plt.subplots(1, 3, figsize=(22, 8), dpi=self.dpi)\n \n ax = axes[0]\n@@ -2276,7 +2275,7 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0, 1.01)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n@@ -2318,6 +2317,7 @@\n ]\n \n fig, axes = plt.subplots(1, 1 + len(available), figsize=(22, 5), dpi=self.dpi)\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2533,6 +2524,8 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ if not (len(X) == len(X_recon) == len(spectral_types)):\n+ raise RuntimeError(\"Observation alignment: incompatible lengths\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n@@ -2821,7 +2814,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(max(vals.min(), np.finfo(float).tiny)), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n@@ -2831,6 +2824,9 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls}: excluded {missing} of {len(vals)} outside support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n@@ -3054,7 +3050,7 @@\n MS_G_HOT + (MS_G_COOL - MS_G_HOT) * 0.35,\n ),\n (T_LO + (T_HI - T_LO) * 0.25, MS_G_COOL - 0.10),\n- (T_LO + T_PAD, G_HI - T_PAD * 2),\n+ (T_LO + T_PAD, G_HI - G_PAD * 2),\n (T_LO + T_PAD, G_HI - G_PAD),\n (T_LO + (T_HI - T_LO) * 0.20, MS_G_COOL + MS_W * 0.6),\n (\n@@ -3212,7 +3208,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 population fournie\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "candidate_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_disclosure_identifies_the_relevant_exclusion_bound", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000222E2206260>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000222E058A500>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:204: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:236: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:236: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:238: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x00000222E221E0A0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:250: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:251: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:271: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:270: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:279: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:326: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:343: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:364: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1500/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1500/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:202: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:432: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:437: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]), array([0.04 , 0.09 , 0.1 , 4. , 4.06521739,\\n 4.13043478, 4.19565217, 4.26086957, 4.326086...48, 6.47826087, 6.54347826, 6.60869565, 6.67391304,\\n 6.73913043, 6.80434783, 6.86956522, 6.93478261, 7. ]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ".............................................................FFFFFFFFFFF [ 82%]\nFFFF.FFFFFFFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000222E2206260>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x00000222E058A500>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:204: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:236: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:236: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:238: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x00000222E221E0A0>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:250: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:251: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:271: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:270: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:279: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:326: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:343: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:364: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1500/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1500/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:202: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:432: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:437: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]), array([0.04 , 0.09 , 0.1 , 4. , 4.06521739,\\n 4.13043478, 4.19565217, 4.26086957, 4.326086...48, 6.47826087, 6.54347826, 6.60869565, 6.67391304,\\n 6.73913043, 6.80434783, 6.86956522, 6.93478261, 7. ]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-z57401ay\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n25 failed, 62 passed in 39.02s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_disclosure_identifies_the_relevant_exclusion_bound", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1090, + 1092, + 1095, + 1096, + 1097, + 1098, + 1099, + 1102, + 1104, + 1105, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1126, + 1127, + 1128, + 1129, + 1131, + 1132, + 1133, + 1135, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1149, + 1150, + 1151, + 1153, + 1154, + 1155, + 1156, + 1158, + 1159, + 1162, + 1164, + 1165, + 1169, + 1171, + 1172, + 1173, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1195, + 1196, + 1197, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1211, + 1212, + 1215, + 1217, + 1219, + 1221, + 1222, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1232, + 1234, + 1236, + 1237, + 1239, + 1241, + 1242, + 1243, + 1244, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1252, + 1253, + 1255, + 1260, + 1261, + 1262, + 1266, + 1267, + 1268, + 1269, + 1271, + 1272, + 1274, + 1275, + 1277, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1285, + 1287, + 1288, + 1289, + 1291, + 1292, + 1293, + 1294, + 1295, + 1296, + 1298, + 1299, + 1300, + 1302, + 1303, + 1304, + 1305, + 1306, + 1308, + 1309, + 1312, + 1314, + 1316, + 1317, + 1318, + 1319, + 1320, + 1321, + 1323, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1332, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1343, + 1351, + 1356, + 1359, + 1360, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1371, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1386, + 1387, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1414, + 1415, + 1417, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1426, + 1427, + 1428, + 1429, + 1430, + 1432, + 1433, + 1434, + 1435, + 1437, + 1440, + 1441, + 1442, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1455, + 1456, + 1457, + 1458, + 1460, + 1461, + 1462, + 1463, + 1464, + 1466, + 1467, + 1468, + 1470, + 1475, + 1478, + 1481, + 1482, + 1483, + 1484, + 1485, + 1487, + 1488, + 1489, + 1490, + 1493, + 1494, + 1495, + 1498, + 1499, + 1501, + 1502, + 1504, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1516, + 1517, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1529, + 1530, + 1531, + 1532, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1558, + 1559, + 1560, + 1562, + 1563, + 1564, + 1565, + 1567, + 1568, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1582, + 1583, + 1584, + 1585, + 1587, + 1588, + 1589, + 1590, + 1592, + 1593, + 1594, + 1596, + 1599, + 1600, + 1601, + 1604, + 1605, + 1607, + 1608, + 1609, + 1612, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1620, + 1621, + 1622, + 1623, + 1624, + 1625, + 1627, + 1628, + 1629, + 1630, + 1631, + 1633, + 1634, + 1635, + 1636, + 1638, + 1643, + 1647, + 1648, + 1649, + 1650, + 1651, + 1652, + 1654, + 1655, + 1656, + 1657, + 1658, + 1660, + 1662, + 1664, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1675, + 1676, + 1678, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1690, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1703, + 1704, + 1705, + 1706, + 1707, + 1709, + 1711, + 1712, + 1714, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1724, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1736, + 1752, + 1753, + 1754, + 1755, + 1756, + 1757, + 1759, + 1761, + 1762, + 1763, + 1764, + 1765, + 1767, + 1768, + 1769, + 1771, + 1776, + 1777, + 1790, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1798, + 1799, + 1800, + 1801, + 1802, + 1803, + 1806, + 1808, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1819, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1832, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1845, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1854, + 1855, + 1856, + 1857, + 1860, + 1861, + 1862, + 1865, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1875, + 1876, + 1877, + 1879, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1890, + 1911, + 1912, + 1915, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1925, + 1927, + 1928, + 1931, + 1932, + 1933, + 1934, + 1935, + 1936, + 1938, + 1939, + 1940, + 1941, + 1942, + 1943, + 1945, + 1946, + 1947, + 1949, + 1951, + 1955, + 1956, + 1960, + 1961, + 1962, + 1963, + 1965, + 1966, + 1967, + 1969, + 1970, + 1972, + 1973, + 1974, + 1975, + 1976, + 1978, + 1979, + 1980, + 1982, + 1983, + 1984, + 1986, + 1987, + 1988, + 1989, + 1991, + 1992, + 1993, + 1995, + 1996, + 1998, + 1999, + 2000, + 2002, + 2006, + 2007, + 2011, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2021, + 2022, + 2024, + 2025, + 2026, + 2027, + 2028, + 2029, + 2031, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2045, + 2046, + 2048, + 2049, + 2050, + 2054, + 2061, + 2064, + 2067, + 2068, + 2069, + 2071, + 2072, + 2073, + 2075, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2085, + 2086, + 2087, + 2088, + 2089, + 2091, + 2092, + 2094, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2106, + 2107, + 2109, + 2112, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2121, + 2122, + 2124, + 2125, + 2127, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2136, + 2137, + 2139, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2148, + 2149, + 2150, + 2152, + 2153, + 2154, + 2155, + 2157, + 2158, + 2159, + 2161, + 2165, + 2169, + 2170, + 2171, + 2172, + 2174, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2185, + 2186, + 2188, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2198, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2206, + 2207, + 2208, + 2209, + 2213, + 2218, + 2219, + 2220, + 2223, + 2224, + 2226, + 2229, + 2230, + 2232, + 2233, + 2234, + 2235, + 2237, + 2238, + 2240, + 2241, + 2242, + 2243, + 2245, + 2246, + 2247, + 2249, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2259, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2268, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2278, + 2279, + 2280, + 2281, + 2282, + 2283, + 2287, + 2292, + 2296, + 2297, + 2298, + 2299, + 2301, + 2302, + 2303, + 2304, + 2305, + 2307, + 2308, + 2313, + 2314, + 2315, + 2316, + 2319, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2527, + 2528, + 2529, + 2543, + 2557, + 2558, + 2559, + 2560, + 2563, + 2564, + 2566, + 2567, + 2568, + 2569, + 2570, + 2571, + 2572, + 2574, + 2576, + 2577, + 2578, + 2581, + 2582, + 2591, + 2592, + 2593, + 2595, + 2596, + 2598, + 2602, + 2603, + 2604, + 2605, + 2606, + 2608, + 2611, + 2612, + 2614, + 2615, + 2616, + 2617, + 2618, + 2619, + 2620, + 2621, + 2622, + 2623, + 2624, + 2625, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2633, + 2634, + 2635, + 2637, + 2639, + 2640, + 2641, + 2642, + 2643, + 2644, + 2645, + 2646, + 2647, + 2649, + 2650, + 2651, + 2652, + 2654, + 2655, + 2657, + 2658, + 2659, + 2661, + 2662, + 2663, + 2665, + 2670, + 2671, + 2674, + 2675, + 2678, + 2679, + 2680, + 2711, + 2712, + 2715, + 2717, + 2718, + 2719, + 2720, + 2724, + 2725, + 2726, + 2727, + 2728, + 2729, + 2733, + 2734, + 2735, + 2736, + 2737, + 2738, + 2741, + 2742, + 2743, + 2744, + 2745, + 2746, + 2747, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2771, + 2772, + 2774, + 2775, + 2777, + 2778, + 2779, + 2780, + 2781, + 2782, + 2783, + 2785, + 2786, + 2787, + 2788, + 2790, + 2791, + 2792, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2859, + 2865, + 2866, + 2869, + 2871, + 2872, + 2873, + 2874, + 2875, + 2877, + 2879, + 2880, + 2882, + 2883, + 2885, + 2891, + 2892, + 2893, + 2894, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2906, + 2907, + 2908, + 2909, + 2911, + 2912, + 2913, + 2914, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2924, + 2926, + 2928, + 2930, + 2931, + 2932, + 2942, + 2943, + 2944, + 2945, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2954, + 2955, + 2956, + 2957, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2966, + 2967, + 2968, + 2970, + 2971, + 2973, + 2974, + 2976, + 2977, + 2979, + 2982, + 2995, + 2996, + 2997, + 2999, + 3000, + 3001, + 3002, + 3004, + 3005, + 3006, + 3011, + 3012, + 3013, + 3014, + 3016, + 3017, + 3026, + 3027, + 3028, + 3031, + 3034, + 3035, + 3037, + 3038, + 3039, + 3040, + 3041, + 3042, + 3043, + 3044, + 3046, + 3047, + 3048, + 3049, + 3050, + 3052, + 3053, + 3054, + 3055, + 3056, + 3057, + 3058, + 3060, + 3064, + 3065, + 3066, + 3067, + 3068, + 3069, + 3070, + 3071, + 3073, + 3074, + 3075, + 3076, + 3077, + 3078, + 3082, + 3083, + 3084, + 3085, + 3086, + 3087, + 3088, + 3089, + 3091, + 3092, + 3093, + 3094, + 3095, + 3096, + 3097, + 3101, + 3102, + 3103, + 3104, + 3105, + 3106, + 3107, + 3108, + 3110, + 3111, + 3112, + 3113, + 3114, + 3115, + 3116, + 3122, + 3125, + 3138, + 3139, + 3140, + 3141, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3151, + 3152, + 3153, + 3156, + 3157, + 3158, + 3159, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3167, + 3168, + 3169, + 3170, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3184, + 3185, + 3186, + 3187, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3199, + 3200, + 3201, + 3202, + 3204, + 3205, + 3207, + 3208, + 3209, + 3210, + 3212, + 3213, + 3215, + 3216, + 3218, + 3219 + ], + "stdout": "........................................................................ [ 82%]\n............... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-z57401ay\\result.xml -\n87 passed in 47.52s\n", + "stderr": "" + } + } + ], + "executed_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/proofs_dimred_visualizer.py": "6907249c50b205febac0e87ebdeb537dcd9d58ba7eadeaa4320cfd460a7ce1fb", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "d0b744c8b12e6d7d22923691bcac15f5d03b00d946941cf641b124421a2767ea", + "tests/test_visualizer_review_contracts.py": "17163a01b61f7497d12e4c313e6870ac31c75314301323b07c76d30e0e3dbd9b" + }, + "protected_unchanged": true +} diff --git a/audit/m28_review_green_red_replay_results.json b/audit/m28_review_green_red_replay_results.json new file mode 100644 index 0000000..22f65b6 --- /dev/null +++ b/audit/m28_review_green_red_replay_results.json @@ -0,0 +1,1245 @@ +{ + "active_head": "a8bc8506804cf4c89e784e458498d3f229ca81cb", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6" + }, + "mode": "baseline", + "runs": [], + "proofs_ref": "a8bc8506804cf4c89e784e458498d3f229ca81cb", + "executed_files_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/proofs_dimred_visualizer.py": "6907249c50b205febac0e87ebdeb537dcd9d58ba7eadeaa4320cfd460a7ce1fb", + "tests/visualizer_review_contracts.py": "d0b744c8b12e6d7d22923691bcac15f5d03b00d946941cf641b124421a2767ea", + "tests/test_visualizer_review_contracts.py": "17163a01b61f7497d12e4c313e6870ac31c75314301323b07c76d30e0e3dbd9b" + }, + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001E666673E60>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001E6DCC5F3E0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:204: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:236: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:236: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:238: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000001E6DCCEE500>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:250: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:251: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:271: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:270: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:279: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:326: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:343: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:364: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1499/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1499/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:202: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:432: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:437: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]), array([0.04 , 0.09 , 0.1 , 4. , 4.06521739,\\n 4.13043478, 4.19565217, 4.26086957, 4.326086...48, 6.47826087, 6.54347826, 6.60869565, 6.67391304,\\n 6.73913043, 6.80434783, 6.86956522, 6.93478261, 7. ]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1199, + 1200, + 1201, + 1202, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FFFFFFFFFFFFFFF.FFFFFFFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:125: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:169: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001E666673E60>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:184: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(int(v) == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not ['43019'] or False)\nE + where False = all(. at 0x000001E6DCC5F3E0>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:204: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:236: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:228: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:236: in assert_cluster_encoding\n assert all(\nE AssertionError: Misleading colorbar for C2\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:238: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000001E6DCCEE500>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:250: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:251: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:253: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:271: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:270: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:279: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:292: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:326: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0.05\nE Annotated PC count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:343: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:364: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1499/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:407: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1499/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:420: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:202: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:432: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:437: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:458: in test_linear_histogram_truncation_discloses_population\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Silent conditional histogram: represented=3/50, area=1.0, median=5.4021739130434785\nE assert (np.int64(47) == 0 or False)\nE + where False = (, 'QSO', np.int64(47), 50, array([0. , 0.00251949, 0.00503898, 0.00755847, 0.01007797,\\n 0.01259746, 0.01511695, 0.01763644, 0.020155...58, 0.12849407, 0.13101356, 0.13353305, 0.13605254,\\n 0.13857203, 0.14109153, 0.14361102, 0.14613051, 0.14865 ]), array([0.04 , 0.09 , 0.1 , 4. , 4.06521739,\\n 4.13043478, 4.19565217, 4.26086957, 4.326086...48, 6.47826087, 6.54347826, 6.60869565, 6.67391304,\\n 6.73913043, 6.80434783, 6.86956522, 6.93478261, 7. ]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-efawq8qn\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n25 failed, 1 passed in 23.38s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_review_green_validation_results.json b/audit/m28_review_green_validation_results.json new file mode 100644 index 0000000..8b44c94 --- /dev/null +++ b/audit/m28_review_green_validation_results.json @@ -0,0 +1,151 @@ +{ + "active_head": "a8bc8506804cf4c89e784e458498d3f229ca81cb", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "executable": "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "versions": { + "numpy": "2.4.6", + "pandas": "3.1.1", + "scipy": "1.17.1", + "scikit-learn": "1.9.1", + "matplotlib": "3.11.2", + "pytest": "8.4.2", + "black": "24.4.2", + "ruff": "0.5.0", + "pillow": "13.0.0" + }, + "effective_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/test_dimred_visualizer.py": "7577ca33e86c753bcb2ae5d2a62008e45bca346853e3753b4a9576b3ae411854", + "tests/visualizer_review_contracts.py": "d0b744c8b12e6d7d22923691bcac15f5d03b00d946941cf641b124421a2767ea", + "tests/test_visualizer_review_contracts.py": "17163a01b61f7497d12e4c313e6870ac31c75314301323b07c76d30e0e3dbd9b", + "audit/check_m28_evidence.py": "f0b8f438e79b3dc3ea5f42a6f6e530316bf93fd2a4ac9b848333e3c6c363188e", + "audit/check_m28_boundaries.py": "72f0c956c8719acafe0d9c07fa05e93c3f4d69ce297a8befeccef73bad4cdfb0", + "audit/check_m28_validation.py": "fda730977f875e9b951171a89e5e14d44ca0fa7524e2c7651e45d743bc581e1b", + "audit/check_m28_review.py": "1691981d66db6f38b7d66743d648820bde9d3389f30f42f17b65bc06dc6afadd" + }, + "commands": [ + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-W", + "error", + "--junitxml=test-results/m28-targeted-validation.xml" + ], + "exit_code": 0, + "stdout": "............................................................. [100%]\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-targeted-validation.xml -\n61 passed in 7.05s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "--junitxml=test-results/m28-complete-validation.xml" + ], + "exit_code": 0, + "stdout": "........................................................................ [ 10%]\n........................................................................ [ 20%]\n........................................................................ [ 31%]\n........................................................................ [ 41%]\n........................................................................ [ 51%]\n........................................................................ [ 62%]\n........................................................................ [ 72%]\n........................................................................ [ 83%]\n........................................................................ [ 93%]\n............................................. [100%]\n============================== warnings summary ===============================\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_partial_esa_supplement_merges_without_losing_xmatch_rows\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_bulk_without_matches_stops_auto_fallback\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_cone_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_retry_limit_raises_or_falls_back_by_mode\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_transient_failure_retries_then_succeeds\n C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\tools\\gaia_crossmatcher.py:1210: Pandas4Warning: The inplace keyword in DataFrame.drop is deprecated and will be removed in a future version (PDEP-8).\n See https://pandas.pydata.org/docs/dev/whatsnew/v3.1.0.html#deprecation-inplace for more details.\n df_merged.drop(columns=[\"objid\"], inplace=True, errors=\"ignore\")\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-complete-validation.xml -\n693 passed, 62 deselected, 7 warnings in 23.82s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "--import-mode=importlib", + "--junitxml=test-results/m28-importlib-validation.xml" + ], + "exit_code": 0, + "stdout": "........................................................................ [ 10%]\n........................................................................ [ 20%]\n........................................................................ [ 31%]\n........................................................................ [ 41%]\n........................................................................ [ 51%]\n........................................................................ [ 62%]\n........................................................................ [ 72%]\n........................................................................ [ 83%]\n........................................................................ [ 93%]\n............................................. [100%]\n============================== warnings summary ===============================\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_partial_esa_supplement_merges_without_losing_xmatch_rows\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_bulk_without_matches_stops_auto_fallback\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_cone_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_retry_limit_raises_or_falls_back_by_mode\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_transient_failure_retries_then_succeeds\n C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\tools\\gaia_crossmatcher.py:1210: Pandas4Warning: The inplace keyword in DataFrame.drop is deprecated and will be removed in a future version (PDEP-8).\n See https://pandas.pydata.org/docs/dev/whatsnew/v3.1.0.html#deprecation-inplace for more details.\n df_merged.drop(columns=[\"objid\"], inplace=True, errors=\"ignore\")\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-importlib-validation.xml -\n693 passed, 62 deselected, 7 warnings in 24.17s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "black", + "--check", + "src", + "tests", + "scripts", + "app.py", + "audit/check_m28_evidence.py", + "audit/check_m28_boundaries.py", + "audit/check_m28_validation.py", + "audit/check_m28_review.py" + ], + "exit_code": 0, + "stdout": "", + "stderr": "All done! \u2728 \ud83c\udf70 \u2728\n47 files would be left unchanged.\n" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "ruff", + "check", + "src", + "tests", + "scripts", + "app.py", + "audit/check_m28_evidence.py", + "audit/check_m28_boundaries.py", + "audit/check_m28_validation.py", + "audit/check_m28_review.py" + ], + "exit_code": 0, + "stdout": "All checks passed!\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pip", + "check" + ], + "exit_code": 0, + "stdout": "No broken requirements found.\n", + "stderr": "" + }, + { + "command": [ + "git", + "diff", + "--check" + ], + "exit_code": 0, + "stdout": "", + "stderr": "" + }, + { + "command": [ + "git", + "diff", + "--exit-code", + "39dad874610745ccd456d26972e90f6fb3a11405", + "--", + "src", + "notebooks", + "data", + "models", + "requirements", + "pyproject.toml", + ".github", + "app.py", + "AGENTS.md" + ], + "exit_code": 0, + "stdout": "", + "stderr": "" + } + ], + "all_commands_passed": true +} diff --git a/tests/proofs_dimred_visualizer.py b/tests/proofs_dimred_visualizer.py deleted file mode 100644 index d77396a..0000000 --- a/tests/proofs_dimred_visualizer.py +++ /dev/null @@ -1,460 +0,0 @@ -"""Explicit M2.8 counterexamples; archived and removed from the green head. - -No xfail and no production edits. Refusal, masking and unavailable outputs are -alternatives on invalid data; valid positive cases are in the green suite. -""" - -import re -from types import SimpleNamespace - -import numpy as np -from numpy.testing import assert_allclose, assert_array_equal -import pandas as pd -import pytest - - -def call_or_domain_refusal(call, domain): - """Permit relevant explicit refusal, never accept incidental backend errors.""" - try: - return call() - except (ValueError, RuntimeError) as exc: - message = str(exc).lower() - assert any(word in message for word in domain), message - assert not any( - word in message - for word in [ - "concatenate", - "percentile", - "0 columns", - "singular data covariance", - ] - ), message - return None - except Exception as exc: - pytest.fail( - f"Incidental {type(exc).__name__} instead of explicit domain handling: {exc}" - ) - - -def gaussian_population(n=250): - rng = np.random.default_rng(1729) - Z = rng.normal(size=(n, 2)) * [2.0, 3.0] - meta = pd.DataFrame({"teff_gspphot": np.arange(n, dtype=float) + 3500}) - return Z, np.array(["STAR"] * n), meta - - -@pytest.mark.parametrize( - "case", ["gaussian", "analytic_normal", "mixture31", "mixture7", "mixture83"] -) -def test_kde_labeled_regions_enclose_probability_mass( - visualizer_case, visualizer_contracts, monkeypatch, case -): - """Each displayed label belongs to an actual STAR iso-density geometry. - - Mass means fitted-estimator probability, not empirical fraction of stars. - The broad 0.05-grid mixture quadrature captures >.9999 total mass; .006 - allows cell-boundary discretization, independently checked by C13/K4/K5. - Geometry rtol=.05 covers interpolation on the production 200x200 grid. - """ - import scipy.stats - from matplotlib.axes import Axes - from matplotlib.path import Path - - c = visualizer_case - if case.startswith("mixture"): - rng = np.random.default_rng(int(case.removeprefix("mixture"))) - a = rng.normal(size=(210, 2)) * [1.0, 2.0] - b = rng.normal(size=(90, 2)) * [1.4, 0.7] + [6.0, 3.0] - nonstar = rng.normal(size=(40, 2)) * 0.3 + [6.0, -4.0] - Z = np.vstack([a, b, nonstar]) - y = np.array(["STAR"] * 300 + ["QSO"] * 40) - meta = pd.DataFrame({"teff_gspphot": np.linspace(3500, 9000, len(Z))}) - gx, gy = np.meshgrid(np.linspace(-12, 18, 601), np.linspace(-14, 14, 561)) - else: - Z, y, meta = gaussian_population() - g = np.linspace(-8, 8, 401) - gx, gy = np.meshgrid(2 * g, 3 * g) - stars = {tuple(row) for row in Z[y == "STAR"]} - fitted, labelled = [], [] - real = scipy.stats.gaussian_kde - original_clabel = Axes.clabel - - def fit(data, **kwargs): - estimator = ( - visualizer_contracts.AnalyticGaussian(data, **kwargs) - if case == "analytic_normal" - else real(data, **kwargs) - ) - fitted.append(estimator) - return estimator - - def clabel(ax, cs, *args, **kwargs): - geometry = [[segment.copy() for segment in level] for level in cs.allsegs] - labelled.append( - (ax, cs, kwargs.get("fmt", args[0] if args else None), geometry) - ) - return original_clabel(ax, cs, *args, **kwargs) - - monkeypatch.setattr(scipy.stats, "gaussian_kde", fit) - monkeypatch.setattr(Axes, "clabel", clabel) - fig, axes = c.viz.plot_latent_kde(Z, y, meta) - assert ( - fitted and labelled and fig is not None - ), "Valid KDE needs estimator and informative labelled contours" - estimator = fitted[0] - assert estimator.dataset.shape[1] >= 3 - assert all( - tuple(point) in stars for point in estimator.dataset.T - ), "KDE fitted on non-STAR observations" - broad = estimator(np.vstack([gx.ravel(), gy.ravel()])) - cell = (gx[0, 1] - gx[0, 0]) * (gy[1, 0] - gy[0, 0]) - assert_allclose(broad.sum() * cell, 1, atol=1e-4) - points = np.column_stack([gx.ravel(), gy.ravel()]) - for ax, cs, fmt, geometry in labelled: - assert cs in ax.collections, "Must test the actual plotted contour artist" - claims = [] - for level, segments in zip(cs.levels, geometry): - label = fmt[level] if isinstance(fmt, dict) else fmt(level) - match = re.fullmatch(r"\s*(\d+(?:\.\d+)?)\s*%\s*", label) - assert match, f"Uninterpretable contour probability label: {label}" - claimed = float(match.group(1)) / 100 - claims.append(claimed) - mass = float(broad[broad >= level].sum() * cell) - if case == "analytic_normal": - assert_allclose(mass, max(0.0, 1 - 12 * np.pi * level), atol=0.006) - assert_allclose( - mass, - claimed, - atol=0.006, - rtol=0, - err_msg=f"Actual label {label} disagrees with enclosed KDE mass", - ) - nonempty = [segment for segment in segments if len(segment)] - assert nonempty, f"No contour geometry for label {label}" - enclosed = np.zeros(len(points), dtype=bool) - for segment in nonempty: - # Even/odd containment retains disjoint modes and excludes holes. - enclosed ^= Path(segment).contains_points(points) - polygon_mass = float(broad[enclosed].sum() * cell) - assert_allclose( - polygon_mass, - claimed, - atol=0.006, - rtol=0, - err_msg="Actual contour polygons do not enclose their labelled mass", - ) - vertices = np.vstack(nonempty) - assert_allclose( - estimator(vertices.T), - level, - rtol=0.05, - atol=1e-10, - err_msg="Contour vertices are not on the fitted STAR iso-density", - ) - assert sorted(claims) == [0.68, 0.95, 0.99] - - -def test_hr_region_vertices_have_gravity_units_and_stay_in_domain(visualizer_case): - c = visualizer_case - _, ax = c.viz.plot_hr_teff_regions(c.meta) - # Independent input-domain envelope: never take admissible gravity units - # from limits chosen by the implementation under test. - gravity = c.meta.logg_gspphot.to_numpy() - temperature = c.meta.teff_gspphot.to_numpy() - low, high = gravity.min() - 0.1 * np.ptp(gravity), gravity.max() + 0.1 * np.ptp( - gravity - ) - assert ax.patches, "Valid HR regional figure must contain informative regions" - vertices = np.vstack([p.get_xy() for p in ax.patches]) - assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices - tlo, thi = temperature.min() - 0.1 * np.ptp( - temperature - ), temperature.max() + 0.1 * np.ptp(temperature) - assert np.all((vertices[:, 0] >= tlo) & (vertices[:, 0] <= thi)) - - -@pytest.mark.parametrize("n", [6, 9]) -def test_hr_population_title_is_counted_or_omitted(visualizer_case, n): - c = visualizer_case - meta = pd.concat([c.meta, c.meta.iloc[:3]], ignore_index=True).iloc[:n] - _, ax = c.viz.plot_hr_teff_regions(meta) - title = re.sub(r"(?:LAMOST|Gaia)\s*DR\s*\d+", "", ax.get_title(), flags=re.I) - compact = re.sub(r"(?<=\d)[ \u202f\u00a0](?=\d{3}(?:\D|$))", "", title) - counts = re.findall(r"\b\d+\b", compact) - assert not counts or all(int(v) == n for v in counts), title - - -def test_reconstruction_cardinality_cannot_reassign_spectral_classes(visualizer_case): - c = visualizer_case - # Original G row 4 was removed upstream; truncating assigns original F row 8 - # to G. Twelve retained F rows satisfy the >=10 - # display policy. Missing IDs cannot be reconstructed by this API. - types = np.array(["F"] * 4 + ["G"] * 4 + ["F"] * 9) - X = np.arange(17.0)[:, None] * 10 - keep = np.delete(np.arange(17), 4) - expected_F = X[keep][types[keep] == "F"].mean() - result = call_or_domain_refusal( - lambda: c.viz.plot_ae_recon_by_spectral_type( - X[keep], X[keep] + 2, types, ["feature_Hα_eq_width"] - ), - ["align", "length", "taille", "cardinal", "observ", "row"], - ) - if result is not None and result[0] is not None: - _, axes = result - assert_allclose( - axes[0].patches[0].get_height(), - expected_F, - err_msg="Truncation is not observation identity", - ) - - -@pytest.mark.parametrize("name", ["plot_hdbscan_clusters", "plot_hdbscan_hr"]) -def test_cluster_colorbar_matches_actual_cluster_rgb( - visualizer_case, hdbscan_module, name, visualizer_contracts -): - c = visualizer_case - hdb = hdbscan_module.HDBSCANAnalyzer() - hdb.labels_ = np.array([2, -1, 7, 2, 7, 2]) - hdb._compute_stats() - hdb._build_palette() - fig, axes = getattr(c.viz, name)( - c.Z, hdb, c.y if name.endswith("clusters") else c.meta - ) - coordinates = ( - c.Z - if name.endswith("clusters") - else c.meta[["teff_gspphot", "logg_gspphot"]].to_numpy() - ) - visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates) - - -def test_actual_unit_confidence_is_not_claimed_unavailable(visualizer_case): - c = visualizer_case - _, axes = c.viz.plot_xgboost_umap( - c.Z, np.array(["F"] * 6), np.ones(6), np.array([0] * 6), {0: "blue"} - ) - # Supplied ones are compatible with genuine probability=1; no availability - # flag enters this API. Numeric values alone cannot establish absence. - assert not any("non disponible" in t.get_text() for t in axes[1].texts) - - -@pytest.mark.parametrize("name", ["plot_ae_embedding", "plot_latent_zoomed"]) -def test_no_physical_columns_still_supports_classes_or_explicit_refusal( - visualizer_case, name -): - c = visualizer_case - meta = c.meta[["obsid"]] - - def call(): - if name == "plot_ae_embedding": - return c.viz.plot_ae_embedding(c.Z, meta, c.y) - return c.viz.plot_latent_zoomed(c.Z, c.y, meta) - - result = call_or_domain_refusal( - call, ["physical", "param", "gaia", "column", "colonn"] - ) - if result is not None and result[0] is not None: - _, axes = result - ax = np.atleast_1d(axes)[0] - assert sum(len(sc.get_offsets()) for sc in ax.collections) == 6 - - -@pytest.mark.parametrize("n_show", [1, 0, 4]) -def test_cluster_profiles_unavailable_slots_not_presented_as_data( - visualizer_case, n_show -): - c = visualizer_case - means = pd.DataFrame( - [[1.0, 2, 3, 4, 5], [-1, -2, -3, -4, -5]], index=[2, 7], columns=list("abcde") - ) - result = call_or_domain_refusal( - lambda: c.viz.plot_hdbscan_feature_profiles( - means, np.array([2, 7, 7]), n_show=n_show - ), - ["cluster", "n_show", "positive", "count", "nombre"], - ) - if result is not None and result[0] is not None: - _, axes = result - for ax in np.asarray(axes).ravel(): - assert ( - ax.patches or not ax.axison or not ax.get_visible() - ), "Empty slot looks like a measurement panel" - - -def test_more_reconstructions_than_rows_has_no_empty_measurement_axes(visualizer_case): - c = visualizer_case - _, axes = c.viz.plot_ae_reconstruction( - c.Z[:2], c.Z[:2] + 1, ["a", "b"], n_samples=4 - ) - for ax in axes: - if not ax.axison or not ax.get_visible(): - continue - assert ( - len(ax.lines) >= 2 - ), "Visible panel needs original and reconstructed observations" - pair = [np.asarray(line.get_ydata()) for line in ax.lines[:2]] - assert all( - len(values) == 2 for values in pair - ), "Empty or incomplete reconstruction lines" - row = next((i for i in range(2) if np.array_equal(pair[0], c.Z[i])), None) - assert row is not None, "Panel is not an actual input observation" - assert_array_equal(pair[1], c.Z[row] + 1) - populated = [ax for ax in axes if ax.axison and ax.get_visible()] - assert len(populated) == 2 - - -def test_truncated_variance_annotation_does_not_attribute_wrong_mass(visualizer_case): - c = visualizer_case - pca = SimpleNamespace( - explained_variance_ratio=np.array([0.6, 0.25, 0.15]), - n_components_for_variance=lambda threshold: 3, - ) - _, axes = c.viz.plot_variance_explained(pca, threshold=0.95, max_pcs=2) - for annotation in axes[1].texts: - label = annotation.get_text() - percentages = re.findall(r"(\d+(?:[.,]\d+)?)\s*%", label) - counts = re.findall(r"(\d+)\s*PCs?\b|\bPCs?\s*[:=]?\s*(\d+)", label, re.I) - counts = [int(a or b) for a, b in counts] - if percentages and not counts: - assert hasattr( - annotation, "xy" - ), "A variance percentage needs a PC count or an annotated coordinate" - counts = [int(annotation.xy[0])] - for count in counts: - assert 1 <= count <= 3 - for percentage in percentages: - assert_allclose( - float(percentage.replace(",", ".")), - sum(pca.explained_variance_ratio[:count]) * 100, - atol=0.05, - err_msg="Annotated PC count and variance disagree", - ) - - -def test_log_histogram_keeps_small_positive_errors( - visualizer_case, visualizer_contracts, monkeypatch -): - c = visualizer_case - errors = np.array([1e-8, 1e-7, 1e-6, 0.01, 0.1, 1.0]) - calls = visualizer_contracts.capture_histograms(monkeypatch) - _, axes = c.viz.plot_ae_error_distribution_logscale(errors, np.array(["STAR"] * 6)) - call = next(call for call in calls if call["ax"] is axes[1]) - missing, edges = visualizer_contracts.assert_histogram_population(call, errors) - assert missing == 0 or visualizer_contracts.exclusion_report( - axes[1], "STAR", missing, 6, edges, errors - ), "Positive MSE population silently truncated" - - -def test_histogram_does_not_silently_omit_fifth_class( - visualizer_case, visualizer_contracts, monkeypatch -): - c = visualizer_case - labels = np.array(["A", "B", "C", "D", "E", "E"]) - calls = visualizer_contracts.capture_histograms(monkeypatch) - result = call_or_domain_refusal( - lambda: c.viz.plot_ae_error_distribution( - np.array([1.0, 2, 3, 4, 5, 9]), labels - ), - ["class", "palette", "population"], - ) - if result is None: - return - _, ax = result - represented = {label.split(" ")[0] for label in ax.get_legend_handles_labels()[1]} - assert represented == set(labels), "Palette length silently drops classes" - values = np.array([1.0, 2, 3, 4, 5, 9]) - assert len(calls) == 5, "Legend-only classes are not histogram populations" - for cls in set(labels): - call = next( - ( - call - for call in calls - if cls - in visualizer_contracts.tokens(call["label"]).union( - {s.upper() for s in visualizer_contracts.tokens(call["label"])} - ) - ), - None, - ) - assert call is not None, f"Missing actual histogram for class {cls}" - missing, _ = visualizer_contracts.assert_histogram_population( - call, values[labels == cls] - ) - assert missing == 0 - - -@pytest.mark.parametrize("name", ["plot_training_history", "plot_ae_vs_pca"]) -def test_default_output_directory_applies_to_direct_exports( - visualizer_case, tmp_path, name, visualizer_contracts -): - c = visualizer_case - viz = c.module.DimRedVisualizer(output_dir=tmp_path, dpi=30) - if name == "plot_training_history": - result = viz.plot_training_history( - {"train_loss": [2.0, 1], "val_loss": [3.0, 2]} - ) - else: - result = viz.plot_ae_vs_pca( - pd.DataFrame( - { - "method": ["PCA", "AE"], - "n_components": [1, 2], - "mse_mean": [0.5, 0.3], - } - ) - ) - assert result[0] is not None - assert list(tmp_path.glob("*.png")), "Configured output_dir ignored" - for path in tmp_path.glob("*.png"): - visualizer_contracts.assert_png_matches_figure(path, result[0], viz.dpi) - - -def test_trustworthiness_axis_contains_computed_values( - visualizer_case, visualizer_contracts -): - c = visualizer_case - rng = np.random.default_rng(1729) - X = rng.normal(size=(12, 2)) - bad = X[[7, 0, 9, 4, 1, 10, 2, 11, 3, 6, 5, 8]] - _, ax = c.viz.plot_trustworthiness(X, X, bad, k_values=[1, 2, 3]) - visualizer_contracts.assert_visible_or_disclosed( - ax, {"UMAP": ax.lines[0].get_ydata(), "t-SNE": ax.lines[1].get_ydata()} - ) - - -def test_default_eigenspectrum_line_labels_are_renderable(visualizer_case): - c = visualizer_case - pca = SimpleNamespace( - loadings=np.array([[0.1, -0.4, 0.9, -0.2]]), - explained_variance_ratio=np.array([1.0]), - ) - try: - fig, axes = c.viz.plot_eigenspectra( - pca, np.array([3800.0, 4400.0, 5500.0, 6800.0]), n_components=1 - ) - fig.canvas.draw() - except Exception as exc: - assert False, f"Valid default eigen-spectrum labels must render: {exc}" - assert_array_equal(axes[0].lines[0].get_ydata(), pca.loadings[0]) - - -def test_linear_histogram_truncation_discloses_population( - visualizer_case, visualizer_contracts, monkeypatch -): - """R10 candidate: conditional renormalization is not full-class coverage.""" - c = visualizer_case - stars = np.linspace(0.01, 0.1, 40) - qso = np.r_[[0.04, 0.09, 0.1], np.linspace(4, 7, 47)] - values = np.r_[stars, qso] - labels = np.array(["STAR"] * 40 + ["QSO"] * 50) - calls = visualizer_contracts.capture_histograms(monkeypatch) - _, axes = c.viz.plot_ae_error_distribution_logscale(values, labels) - call = next( - call for call in calls if call["ax"] is axes[0] and "QSO" in call["label"] - ) - missing, edges = visualizer_contracts.assert_histogram_population(call, qso) - area = sum(p.get_width() * p.get_height() for p in call["result"][2]) - assert_allclose(area, 1) - assert missing == 0 or visualizer_contracts.exclusion_report( - axes[0], "QSO", missing, 50, edges, qso - ), f"Silent conditional histogram: represented={50-missing}/50, area={area}, median={np.median(qso)}" From 8e668780b181948856cacb58650b25a0e03eeddf Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Fri, 13 Nov 2026 13:55:32 -0500 Subject: [PATCH 7/8] test(dimred): archive targeted M2.8 third-review evidence --- audit/M28_DIMRED_VISUALIZER.md | 21 + audit/M28_REVIEW_PROOFS.md | 4 + audit/M28_ROUND3_PROOFS.md | 240 + audit/check_m28_evidence.py | 2 +- audit/check_m28_review.py | 160 + audit/m28_r3_final_mutations_results.json | 10113 +++++ audit/m28_r3_final_results.json | 35702 ++++++++++++++++++ audit/m28_r3_final_validation_results.json | 151 + audit/m28_r3_frozen_controls_results.json | 9944 +++++ audit/m28_r3_frozen_mutations_results.json | 10113 +++++ audit/m28_r3_frozen_results.json | 35702 ++++++++++++++++++ audit/m28_r3_frozen_reverse_results.json | 2426 ++ audit/m28_r3_frozen_validation_results.json | 151 + audit/m28_r3_mutations_results.json | 10113 +++++ audit/m28_r3_original_controls_results.json | 9944 +++++ audit/m28_r3_reverse_results.json | 2426 ++ audit/m28_r3_targeted_initial_results.json | 13441 +++++++ audit/m28_r3_validation_results.json | 151 + tests/proofs_dimred_visualizer.py | 472 + tests/test_dimred_visualizer.py | 8 +- tests/test_visualizer_review_contracts.py | 148 + tests/visualizer_review_contracts.py | 249 +- 22 files changed, 141635 insertions(+), 46 deletions(-) create mode 100644 audit/M28_ROUND3_PROOFS.md create mode 100644 audit/m28_r3_final_mutations_results.json create mode 100644 audit/m28_r3_final_results.json create mode 100644 audit/m28_r3_final_validation_results.json create mode 100644 audit/m28_r3_frozen_controls_results.json create mode 100644 audit/m28_r3_frozen_mutations_results.json create mode 100644 audit/m28_r3_frozen_results.json create mode 100644 audit/m28_r3_frozen_reverse_results.json create mode 100644 audit/m28_r3_frozen_validation_results.json create mode 100644 audit/m28_r3_mutations_results.json create mode 100644 audit/m28_r3_original_controls_results.json create mode 100644 audit/m28_r3_reverse_results.json create mode 100644 audit/m28_r3_targeted_initial_results.json create mode 100644 audit/m28_r3_validation_results.json create mode 100644 tests/proofs_dimred_visualizer.py diff --git a/audit/M28_DIMRED_VISUALIZER.md b/audit/M28_DIMRED_VISUALIZER.md index 1a1c6a9..aec5555 100644 --- a/audit/M28_DIMRED_VISUALIZER.md +++ b/audit/M28_DIMRED_VISUALIZER.md @@ -8,6 +8,27 @@ preserved. Production blob **624b857bca5833c3401204b0a592b9ae6ffc2902**. Actual inventory: **38 methods**, including initializer and two helpers, not31. Entire3224-line source read. AGENTS v1.3 fetched from current main. +## Targeted third pass - second review 5895743573 + +Current corrections are limited to **R1, R2b, R6, R7 and R10**; see +[M28_ROUND3_PROOFS.md](M28_ROUND3_PROOFS.md) for policies, limits, new archive +and results. K10 tests fitted-population representativeness; K11 admits valid +random sampling. Colorbar role is structural and independent of caption or +orientation; all coexisting categorical encodings must agree. Numeric locale, +component synonyms and independent count/variance relations replace the +remaining fixed prose. R10 admits disclosed conditional density or correctly +identified total-class density as a **proposed test policy awaiting scientific +acceptance**; issue creation still requires explicit human approval. Complete +advertised KDE regions must remain inside the displayed domain. The previous +61 nodes and resolved contracts remain; five focused adapter nodes are added. +Current local evidence: **66 green PASS with -W error**, full default/importlib +**698 PASS / 62 deselected / 7 preexisting Gaia warnings**; reversed targeted +66 PASS. Prior 61 nodes preserved. M01-M16 16 KILLED; original C01-C14 14 PASS, +F01-F03 3 KILLED; extended review campaign 27 KILLED, 18 admissible PASS and +JOINT/JOINT_TOTAL each 92 PASS. Explicit red baseline remains 25 FAIL/1 PASS, +26 cases. No production fix or general scientific approval is inferred. +All earlier sections/results below retain their historical meaning. + ## Revision after Claude review 5858927009 - 2026-11-13 This revision resumes PR #116 at `4364c61f56d91f7ec93c5c6072b9f88c46023241`; diff --git a/audit/M28_REVIEW_PROOFS.md b/audit/M28_REVIEW_PROOFS.md index efa6018..e66a12c 100644 --- a/audit/M28_REVIEW_PROOFS.md +++ b/audit/M28_REVIEW_PROOFS.md @@ -1,5 +1,9 @@ # M2.8 - revised evidence after Claude review 5858927009 +> Third-pass update after review 5895743573: this is the preserved second-pass +> manifest. See [targeted current revision](M28_ROUND3_PROOFS.md) for R1, R2b, +> R6/R7 and the proposed R10 normalization policy. Historical results remain unchanged. + Revision date: 2026-11-13. Refs #43 / Draft PR #116. Same worktree `AstroSpectro-m28`, same branch `audit/43-dimred-visualizer`; production blob `624b857bca5833c3401204b0a592b9ae6ffc2902` and base diff --git a/audit/M28_ROUND3_PROOFS.md b/audit/M28_ROUND3_PROOFS.md new file mode 100644 index 0000000..a6fa9af --- /dev/null +++ b/audit/M28_ROUND3_PROOFS.md @@ -0,0 +1,240 @@ +# M2.8 - targeted third pass after Claude review 5895743573 + +Refs #43 / Draft PR #116. Examined starting head: +`e924f36f24412a435f5ca54a95cdfad914835ff2`, same branch +`audit/43-dimred-visualizer`, same worktree `AstroSpectro-m28`. +Base `39dad874610745ccd456d26972e90f6fb3a11405`; production blob +`624b857bca5833c3401204b0a592b9ae6ffc2902` unchanged. Read main AGENTS v1.3, +second review and all replies in the five concerned threads before editing. +No production, dependency, workflow, notebook, data or model change. + +## Scope and historical evidence + +Only R1, R2b, R6, R7 and R10 are revised. Resolved observations are not reopened. +The previous 61 green node IDs and numeric contracts are preserved, with the +fixed variance sentence replaced by its count/variance relation as requested. +Five new green nodes exercise locale parsing, component synonyms, both colorbar +orientations and histogram denominators. Shared-helper regressions require +replaying the previous candidate campaigns; that is not a new audit. + +Historical archives remain immutable: + +- `ed1d91ec0efb619aeb77a5bf7e4a0ab43fa84cac`, ref + `audit/43-dimred-visualizer-proofs`, baseline 21 FAIL / 1 PASS (22 cases). +- `a8bc8506804cf4c89e784e458498d3f229ca81cb`, tag + `audit/m28-review-proofs-2026-11-13`, baseline 25 FAIL / 1 PASS (26 cases). + +Their JSON logs are not rewritten. A third snapshot will be designated on tag +`audit/m28-round3-proofs-2026-11-13`, pushed and read back before normal removal +of the explicit red proof file. The new snapshot will be an ancestor of the +same PR branch; no second M2.8 branch or PR is created. + +## R1 - sampled population and complete probability contours + +The existing three seeded mixtures retain 210 observations in one mode and +90 in a second mode, plus 40 distinct non-STAR observations. The oracle still +checks actual fitted STAR membership, actual labels, superlevel probability, +actual polygon probability and iso-density vertices, including the analytic +Gaussian control. On mixture cases it additionally checks the fitted fraction +with x > 3 against **90/300 +/- 0.10**. This cut separates these synthetic modes +with small overlap; it is not an astrophysical discriminator. + +For a random half-sample n=150 from N=300 and p=.30, the hypergeometric standard +error is sqrt(p*(1-p)*(N-n)/(n*(N-1))) = about .0265. The .10 envelope is about +3.8 such standard errors, also allowing the small overlap of the two modes. +This is a gross-selection-bias check on these finite seeded fixtures, not a +universal unbiasedness test, confidence guarantee, or mandatory sample size. +The oracle never requires all STAR observations or a particular RNG sequence. +K10 removes the second mode and must fail on this population contract before +incidental interpolation errors; K11 samples half randomly and must pass. +C13, K4 and K5 remain admissible independent mass-solving approaches. + +Working contour policy supplied for this pass: a contour advertised as a +complete 68/95/99 percent probability region must be closed and wholly inside +the displayed domain. Probability outside the visible frame cannot silently +be advertised as enclosed by its visible portion. The fixtures allow complete +regions, so the proof verifies closure and actual axis-domain containment as +well as probability. The display-domain completion used by C13/K4/K5 is +retained. A different explicitly partial-region product would need its own +unambiguous claim and validation; this bounded proof does not certify such an +alternative. The existing contour-label adapter still targets clabel; proxy +contour legends suggested in the review are not validated in this targeted pass. +This policy and its limits are linked from #101. No universal +coverage of observed stars, astrophysical validation or calibration is implied. + +## R2b - every categorical representation must agree + +Colorbars are identified structurally as Matplotlib Colorbar objects. A +physical scalar bar is bound to an actual data-bearing collection distinct +from the cluster collections; standalone ScalarMappables remain categorical +regardless of caption or orientation. Actual cluster ID -> actual point RGB +is compared to every relevant colorbar, legend handle and colored annotation. +A correct representation never excuses a contradictory one. Horizontal and +vertical bars, renamed captions, discrete correct bars, Patch legends and +faithful colored annotations (including count suffixes/bare IDs) are covered. +No aesthetic palette or exact French sentence is imposed. Actual visible +Matplotlib Legend artists are read, including figure-level and additional +legends. Underlying artist labels that are not displayed are not treated as +scientific disclosures. A global contradictory legend is rejected even when +an axis-level legend is correct. + +An initial annotation-only control removed HR's bar but the tiny fixture had +no HR annotations under the existing 20-point display threshold. Its failure +was genuine missing information, not an admissible-control success. The final +synthetic control enables annotations for its small clusters; production and +its annotation threshold are unchanged. This checkpoint remains in +`m28_r3_targeted_initial_results.json` and is not current delivery evidence. + +## R6/R7 - numeric meaning rather than fixed prose + +`numbers()` supports decimal dot or comma, spaced/narrow-space/nonbreaking-space +thousands, unambiguous multiple comma groups, scientific notation and k/K/M +suffixes. A single comma is decimal by the explicit French convention; an +isolated English `1,234` is inherently locale ambiguous and is not guessed to +mean thousands. Token matching folds accents, so tronque/tronquées are read +without losing their numeric content. Bad bounds and counts fail assertions, +not float-conversion errors. Excluded/total roles are checked, not just an +unordered set of numbers. + +D03 reads 43k or approximately 0.043M as counts, in addition to grouped integers; +catalogue-release metadata remains distinguished. Component annotations accept +PC/PCs/CP/composantes (and equivalent number/word order) and decimal comma. +Each percentage is linked to cumulative model variance for the count mentioned +or the annotated point. The green PCA 9:4:1 control requires count 2 to announce +100*(9+4)/14 within the existing one-decimal printing tolerance .05 percentage +points; it no longer requires the strings '2 PCs' and '92.9%'. False +'3 composantes -> 85 %' fails the scientific relation. + +## R10 - two explicit normalization conventions, proposed test policy + +The P2 diagnosis and complete five-section issue proposal in +[M28_REVIEW_PROOFS.md](M28_REVIEW_PROOFS.md) remain separate from #111's log floor. +No new issue is created. Human approval is still required for that issue. + +The following is the **proposed working test policy for this pass**, presented +for final scientific acceptance; passing these tests does not ratify it: + +1. Conditional density divides bin counts by the number inside the support and + bin width. Its visible area is 1. If observations are excluded, class, + excluded/total counts and the relevant support cutoff must be disclosed. +2. Total-class density divides by the full class count and bin width. Its + visible area is the represented fraction, **3/50 = .06** in the QSO example. + It is admissible with an explicit density scale, actual support and correctly + identified total reference population. A label claiming a different + denominator or simultaneous contradictory convention is rejected. + +Both cases use independently counted bin populations and actual bar heights. +The denominator is never inferred only from a nice-looking area or caption. +Total-population labels with conditional heights, conditional labels with +full-population heights and incorrect stated totals fail by assertions. +French decimal-comma disclosures are admissible; wrong bounds/counts remain +rejected. Policies for zero/negative/nonfinite MSE, published historical runs, +[M/H] versus [Fe/H], astrophysical taxonomy, fixed titles and anomalies remain +unchanged and open where previously documented. + +### Current R10 issue proposal - do not create without human approval + +**Title:** `fix: disclose population and normalization in linear error histograms` + +**Problem:** unchanged base source line 2833 selects linear bins up to +1.5*P99(STAR). With STAR=linspace(.01,.1,40) and QSO=[.04,.09,.1] plus +linspace(4,7,47), support ends at .14865. Only 3/50 QSO contribute, yet +conditional density has area 1 and the full-class median 5.402173913 is outside. + +**Why:** the displayed density can be mistaken for the complete class. +Proposed bug/science/P2, demonstrated on synthetic data; historical publication +impact is not established. This upper-support/normalization mechanism is +distinct from #111's logarithmic lower floor. Earlier duplicate searches and +Claude's confirmation are recorded in the prior manifest/review; no new +unrelated defect search is made in this pass. + +**Expected:** full relevant support, or a correctly identified partial-support +representation under the proposed policy above: conditional area 1 with exact +exclusions, or total-class density with area 3/50, correct denominator, density +scale and support. Scientific acceptance of that test policy remains pending. + +**Verification:** archived R10 proof, independent bin counts/bar heights, +A_HIST/AD_HIST/AD_COMMA/A_TOTAL positive controls, and misleading-denominator +candidates. Both normalization conventions must be distinguishable. + +**Out of scope:** production fixes, new issue creation without explicit human +approval, zero/negative/nonfinite policy, real data/models/catalogues and +historical scientific results. The issue has not been created. + +The displayed-legend adapter controls were run before correction: the two +orientation cases failed to reject a contradictory figure legend, and a valid +proxy-legend-only total normalization was rejected (3 assertion failures, +10 deselected). After correction the full 13 adapter cases pass. This tests +the requested representation contracts, not a newly claimed production bug. +Earlier `m28_r3_*` checkpoints precede this last adapter completion; current +checks use the `m28_r3_frozen_*` ledgers and subsequent archive replays. Their +historical outputs are retained and not aggregated as extra kills. + +## Verification and replay + +| Local check | Actual result / ledger | +|---|---| +| Previous 61 green node IDs | All retained; 5 added nodes, 66 total | +| M2.8 `-W error` | 66 PASS - `m28_r3_frozen_validation_results.json` | +| Full default and importlib pytest | Each 698 PASS / 62 deselected / 7 preexisting Gaia warnings - same ledger | +| Reversed M2.8, hashseed 7 | 66 PASS - `m28_r3_frozen_reverse_results.json` | +| M01-M16 | 16 KILLED, baseline 66 PASS - `m28_r3_frozen_mutations_results.json` | +| Original C01-C14 / F01-F03 | 14 PASS / 3 KILLED - `m28_r3_frozen_controls_results.json` | +| Explicit red baseline | 25 FAIL / 1 PASS / 0 ERROR/SKIP, 26 cases - same controls ledger | +| Black --check/Ruff, pip check, diff/check, protected paths | PASS; four audit scripts explicitly included - frozen validation ledger | + +The authoritative [candidate ledger](m28_r3_frozen_results.json) gives **27 +KILLED / 0 SURVIVED / 0 inconclusive**, **18 admissible controls PASS** and two +joint experiments **92/92 PASS each** (66 green + 26 red). This comprises the +previous 19 incorrect candidates plus 8 targeted variants, not 27 production +bugs. Every wrong candidate has a passing admissible baseline, matching +collection, all changed hunks reached and assertion failures. No conversion +or fixture/backend error is counted as a scientific kill. + +| Targeted candidate | Actual result | +|---|---| +| K10 | 3 mixture assertion FAIL / 2 Gaussian PASS; fitted mode fraction 0 versus .30, before density interpolation | +| K11 | 5 PASS; valid random half-sample, no universal size mandate | +| FD05 / FD05_H | Each 2 assertion FAIL; renamed contradictory vertical/horizontal bars | +| AC05_H / AD05_ANN | Each 2 PASS; correct horizontal bar / faithful annotations | +| FD03_K / FVAR_COMPONENT | 2 / 1 assertion FAIL for 43k count and false 3-component variance | +| A_VARIANCE | 2 PASS (green analytic PCA and truncated-display proof), decimal comma and composantes | +| AD_COMMA | 2 PASS for exact French exclusions; FD_COMMA_BOUND fails the relevant upper cutoff in R10 (D11 lower-cutoff contract still passes) | +| A_TOTAL | 1 PASS, QSO visible area 3/50 | +| F_TOTAL_LIE / F_CONDITIONAL_LIE | Each 1 assertion FAIL for incompatible heights and declared convention | +| JOINT / JOINT_TOTAL | Each 92 PASS; disclosed conditional / identified total-class convention | + +C13/K4/K5 remain 5 PASS each; AD05/AC05 remain 2 PASS each. The original +M01-M16 remain 16 KILLED; original C01-C14 remain 14 PASS and F01-F03 3 KILLED. +The execution guard confirms inputs were unchanged throughout the frozen run. +The disclosure adapter validates the crossed cutoff and supported numeric +roles; it does not certify arbitrary extra prose or every possible annotation. + Earlier checkpoints +are not substituted for the current run. Active HEAD and LF hashes identify +the actual tested bytes separately. Each wrong +candidate uses a passing admissible baseline on the same selection; collection +and changed-hunk execution must match and failures must be assertions. Import, +fixture, conversion and incidental backend failures do not count as kills. +All modifications of production for these experiments occur only in synthetic +TemporaryDirectories. The real production source is never changed. + +On the new snapshot checkout: + +```powershell +python -m pytest -q tests/proofs_dimred_visualizer.py --tb=short +python audit/check_m28_review.py --output test-results/m28-round3.json +python audit/check_m28_evidence.py --mode mutations --output test-results/m28-round3-mutations.json +python audit/check_m28_evidence.py --mode proofs --output test-results/m28-round3-controls.json +``` + +From the green head, add `--proofs-ref ` to the baseline/proof +reconstruction commands, or to `check_m28_review.py` (optionally `--only JOINT +JOINT_TOTAL`). The fixed tag is the default baseline ref once the proof file is +absent. Replays restore exact archived tests, fixtures and helpers and verify +production equality. Do not overwrite historical audit JSON outputs. + +CI checks only its configured paths and normal green suite; explicit red +proofs, mutation campaigns and lint of the four M2.8 audit scripts are separate +local checks. Hosted logs and their actual head/merge SHA will be linked from +PR #116 and the #43 handoff. This pass stops for Claude's short verification on +K10, FD05, R6/R7 and R10. PR remains Draft, M2.8 yellow, #43 open, M2.9 untouched. diff --git a/audit/check_m28_evidence.py b/audit/check_m28_evidence.py index 276531e..d2f9ab0 100644 --- a/audit/check_m28_evidence.py +++ b/audit/check_m28_evidence.py @@ -380,7 +380,7 @@ def main(): and not (ROOT / PROOF).exists() and args.mode in ["baseline", "proofs"] ): - args.proofs_ref = "refs/tags/audit/m28-review-proofs-2026-11-13" + args.proofs_ref = "refs/tags/audit/m28-round3-proofs-2026-11-13" protected = [SOURCE, GREEN, "tests/conftest.py"] before = {p: digest(ROOT / p) for p in protected} source = (ROOT / SOURCE).read_text(encoding="utf-8") diff --git a/audit/check_m28_review.py b/audit/check_m28_review.py index cefd7bb..54c83eb 100644 --- a/audit/check_m28_review.py +++ b/audit/check_m28_review.py @@ -170,6 +170,83 @@ def disclose_histogram(source): return source +def categorical_orientation(source, correct=False, horizontal=False): + if correct: + source = categorical(source, False) + for method in ["plot_hdbscan_clusters", "plot_hdbscan_hr"]: + source = replace( + source, + method, + 'label="Cluster ID"', + 'label="Groupe HDBSCAN"' + + (', orientation="horizontal"' if horizontal else ""), + ) + return source + + +def annotation_only(source): + for method in ["plot_hdbscan_clusters", "plot_hdbscan_hr"]: + node = next( + n + for n in ast.walk(ast.parse(source)) + if isinstance(n, ast.FunctionDef) and n.name == method + ) + statement = next( + n + for n in node.body + if isinstance(n, ast.Expr) and "plt.colorbar(" in ast.unparse(n) + ) + old = "\n".join( + source.splitlines()[statement.lineno - 1 : statement.end_lineno] + ) + source = replace( + source, + method, + old, + " pass # Categorical annotations remain authoritative.", + ) + return replace(source, "plot_hdbscan_hr", "if m.sum() < 20:", "if m.sum() < 1:") + + +def localized_disclosure(source, wrong=False): + end = "bins[-1]+.05" if wrong else "bins[-1]" + new = f""" missing = int(((valsbins[-1])).sum()) + if missing: + ax.text(.03,.05,f"{{cls}} : {{missing}} exclues sur {{len(vals)}}, observations tronquées hors support {{bins[0]:.6f}} à {{{end}:.6f}}".replace(".",","),transform=ax.transAxes) + ax.hist( + vals,""" + return replace( + source, + "plot_ae_error_distribution_logscale", + " ax.hist(\n vals,", + new, + ) + + +def total_histogram(source, false_total=False, false_conditional=False): + claim = 'f"{cls}: density normalized by total {len(vals)}, support {bins[0]:.6f} to {bins[-1]:.6f}"' + if false_conditional: + claim = 'f"{cls}: conditional density"' + new = f""" hist_kwargs = dict(density=True) + if xscale == "linear": + hist_kwargs = dict(density={false_total},weights=np.full(len(vals),1/(len(vals)*np.diff(bins)[0]))) + ax.text(.03,.12,{claim},transform=ax.transAxes) + ax.hist( + vals,""" + source = replace( + source, + "plot_ae_error_distribution_logscale", + " ax.hist(\n vals,", + new, + ) + return replace( + source, + "plot_ae_error_distribution_logscale", + " density=True,", + " **hist_kwargs,", + ) + + def plans(): p = [] @@ -376,6 +453,89 @@ def n06(s): ) add("AD_HIST", "linear_histogram_truncation", disclose_histogram, True) add("AD_LOG", "log_histogram_keeps", disclose_histogram, True) + # Third pass: only residual R1/R2b/R6/R7/R10 observations. + add( + "K10", + "kde_labeled_regions", + lambda s: replace( + kde_levels(s, C13), + "plot_latent_kde", + 'gaussian_kde(Z_stars[idx].T, bw_method="scott")', + 'gaussian_kde(Z_stars[idx][Z_stars[idx][:,0]<3].T, bw_method="scott")', + ), + ) + add( + "K11", + "kde_labeled_regions", + lambda s: replace( + kde_levels(s, C13), + "plot_latent_kde", + 'gaussian_kde(Z_stars[idx].T, bw_method="scott")', + 'gaussian_kde(Z_stars[idx[:max(3,len(idx)//2)]].T, bw_method="scott")', + ), + True, + ) + add("FD05", "cluster_colorbar", categorical_orientation) + add( + "FD05_H", + "cluster_colorbar", + lambda s: categorical_orientation(s, horizontal=True), + ) + add( + "AC05_H", + "cluster_colorbar", + lambda s: categorical_orientation(s, correct=True, horizontal=True), + True, + ) + add("AD05_ANN", "cluster_colorbar", annotation_only, True) + add( + "FD03_K", + "hr_population_title", + scalar_patch("plot_hr_teff_regions", "43 019 étoiles", "≈ 43k étoiles"), + ) + original_claim = 'f"{n_thresh} PCs\\n→ {cumvar[idx]*100:.1f}%"' + add( + "FVAR_COMPONENT", + "truncated_variance_annotation", + scalar_patch( + "plot_variance_explained", + original_claim, + 'f"{n_thresh} composantes → {cumvar[idx]*100:.1f} %".replace(".",",")', + ), + ) + add( + "A_VARIANCE", + "truncated_variance_annotation or real_pca_variance", + scalar_patch( + "plot_variance_explained", + original_claim, + 'f"{n_thresh} composantes → {pca_analyzer.explained_variance_ratio[:n_thresh].sum()*100:.1f} %".replace(".",",")', + ), + True, + ) + add( + "AD_COMMA", + "linear_histogram_truncation or log_histogram_keeps", + localized_disclosure, + True, + ) + add( + "FD_COMMA_BOUND", + "linear_histogram_truncation or log_histogram_keeps", + lambda s: localized_disclosure(s, wrong=True), + ) + add("A_TOTAL", "linear_histogram_truncation", total_histogram, True) + add( + "F_TOTAL_LIE", + "linear_histogram_truncation", + lambda s: total_histogram(s, false_total=True), + ) + add( + "F_CONDITIONAL_LIE", + "linear_histogram_truncation", + lambda s: total_histogram(s, false_conditional=True), + ) + add("JOINT_TOTAL", "", lambda s: total_histogram(joint(s)), True) add("JOINT", "", joint, True) return p diff --git a/audit/m28_r3_final_mutations_results.json b/audit/m28_r3_final_mutations_results.json new file mode 100644 index 0000000..87ec2c8 --- /dev/null +++ b/audit/m28_r3_final_mutations_results.json @@ -0,0 +1,10113 @@ +{ + "active_head": "e924f36f24412a435f5ca54a95cdfad914835ff2", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6" + }, + "mode": "mutations", + "runs": [ + { + "name": "M01_color_row_roll", + "method": "plot_embedding", + "selection": "embedding_exact_observation", + "changed_lines": [ + 528 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "fbb7900faa59e5ae27981ef362e9ee99e219001a78cd03f3f8854d4bd679b3e1", + "patch": "--- \n+++ \n@@ -525,7 +525,7 @@\n # Chaque classe est trac\u00e9e s\u00e9par\u00e9ment pour g\u00e9rer couleur + marqueur.\n classes = np.unique(y)\n for cls in classes:\n- mask = y == cls\n+ mask = np.roll(y == cls, 1)\n ax.scatter(\n Z[mask, 0],\n Z[mask, 1],\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "embedding_exact_observation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n3 passed, 63 deselected in 0.83s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "embedding_exact_observation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:47: in test_embedding_exact_observation_associations\n assert_array_equal(offsets(sc), c.Z[c.y == cls])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 41.0 (ACTUAL), 7.0 (DESIRED)\nE [0, 1]: 13.0 (ACTUAL), 31.0 (DESIRED)\nE Max absolute difference among violations: 34.\nE Max relative difference among violations: 4.85714286\nE ACTUAL: array([[41., 13.]])\nE DESIRED: array([[ 7., 31.]])" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F.. [100%]\n================================== FAILURES ===================================\n___________ test_embedding_exact_observation_associations[classes] ____________\ntests\\test_dimred_visualizer.py:47: in test_embedding_exact_observation_associations\n assert_array_equal(offsets(sc), c.Z[c.y == cls])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 41.0 (ACTUAL), 7.0 (DESIRED)\nE [0, 1]: 13.0 (ACTUAL), 31.0 (DESIRED)\nE Max absolute difference among violations: 34.\nE Max relative difference among violations: 4.85714286\nE ACTUAL: array([[41., 13.]])\nE DESIRED: array([[ 7., 31.]])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_embedding_exact_observation_associations[classes]\n1 failed, 2 passed, 63 deselected in 0.98s\n", + "stderr": "" + } + }, + { + "name": "M02_variance_units", + "method": "plot_variance_explained", + "selection": "real_pca_variance", + "changed_lines": [ + 154 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "0026e09d1cd7f509e47cea034e79cdff94c6037a4a7ceaaa50d0b42ae70b7fcf", + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n1 passed, 65 deselected in 2.67s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:119: in test_real_pca_variance_and_reconstruction_energy\n assert_allclose(heights(axes[0]), np.array([9, 4, 1]) / 14 * 100)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.6428571428571428 (ACTUAL), 64.28571428571429 (DESIRED)\nE [1]: 0.2857142857142857 (ACTUAL), 28.57142857142857 (DESIRED)\nE [2]: 0.07142857142857142 (ACTUAL), 7.142857142857142 (DESIRED)\nE Max absolute difference among violations: 63.64285714\nE Max relative difference among violations: 0.99\nE ACTUAL: array([0.642857, 0.285714, 0.071429])\nE DESIRED: array([64.285714, 28.571429, 7.142857])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______________ test_real_pca_variance_and_reconstruction_energy _______________\ntests\\test_dimred_visualizer.py:119: in test_real_pca_variance_and_reconstruction_energy\n assert_allclose(heights(axes[0]), np.array([9, 4, 1]) / 14 * 100)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.6428571428571428 (ACTUAL), 64.28571428571429 (DESIRED)\nE [1]: 0.2857142857142857 (ACTUAL), 28.57142857142857 (DESIRED)\nE [2]: 0.07142857142857142 (ACTUAL), 7.142857142857142 (DESIRED)\nE Max absolute difference among violations: 63.64285714\nE Max relative difference among violations: 0.99\nE ACTUAL: array([0.642857, 0.285714, 0.071429])\nE DESIRED: array([64.285714, 28.571429, 7.142857])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_pca_variance_and_reconstruction_energy\n1 failed, 65 deselected in 2.65s\n", + "stderr": "" + } + }, + { + "name": "M03_best_is_max", + "method": "plot_training_history", + "selection": "training_history_minimum", + "changed_lines": [ + 1048 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "be86a4cc9d42b00927f9f7478ce5938b3f78e432208053698595573184c30360", + "patch": "--- \n+++ \n@@ -1045,7 +1045,7 @@\n ax.plot(epochs, train_loss, color=\"#4C72B0\", lw=2, label=\"Train\")\n ax.plot(epochs, val_loss, color=\"#DD8452\", lw=2, ls=\"--\", label=\"Validation\")\n # Best epoch d\u00e9fini sur la val_loss minimale (crit\u00e8re de s\u00e9lection mod\u00e8le).\n- best_epoch = int(np.argmin(val_loss)) + 1\n+ best_epoch = int(np.argmax(val_loss)) + 1\n best_val = min(val_loss)\n ax.axvline(\n best_epoch,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "training_history_minimum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n2 passed, 64 deselected in 1.27s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "training_history_minimum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:242: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:242: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n____ test_training_history_minimum_is_not_last_and_distinct_series[False] _____\ntests\\test_dimred_visualizer.py:242: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])\n_____ test_training_history_minimum_is_not_last_and_distinct_series[True] _____\ntests\\test_dimred_visualizer.py:242: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_training_history_minimum_is_not_last_and_distinct_series[False]\nFAILED tests/test_dimred_visualizer.py::test_training_history_minimum_is_not_last_and_distinct_series[True]\n2 failed, 64 deselected in 1.41s\n", + "stderr": "" + } + }, + { + "name": "M04_family_median", + "method": "plot_ae_error_by_family", + "selection": "error_family_mean", + "changed_lines": [ + 2740, + 2742 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "0c1e0f746f1208318c3a41311cf26ca2247439221e86b8fb26a7f94c2d6ca839", + "patch": "--- \n+++ \n@@ -2739,7 +2739,7 @@\n # Agr\u00e9gation par famille pour r\u00e9sum\u00e9 interpr\u00e9table.\n df_fam = (\n df_feat_mse.groupby(\"family\")[\"mse\"]\n- .agg([\"mean\", \"std\", \"count\"])\n+ .agg([\"median\", \"std\", \"count\"]).rename(columns={\"median\": \"mean\"})\n .rename(columns={\"mean\": \"mse_mean\", \"std\": \"mse_std\", \"count\": \"n_feats\"})\n .reset_index()\n .sort_values(\"mse_mean\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "error_family_mean", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n1 passed, 65 deselected in 0.73s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "error_family_mean", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:317: in test_error_family_mean_is_feature_weighted_and_std_is_between_features\n assert_allclose(widths(axes[0]), [2.5, 50 / 3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 2 (50%)\nE Mismatch at index:\nE [1]: 16.0 (ACTUAL), 16.666666666666668 (DESIRED)\nE Max absolute difference among violations: 0.66666667\nE Max relative difference among violations: 0.04\nE ACTUAL: array([ 2.5, 16. ])\nE DESIRED: array([ 2.5 , 16.666667])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n___ test_error_family_mean_is_feature_weighted_and_std_is_between_features ____\ntests\\test_dimred_visualizer.py:317: in test_error_family_mean_is_feature_weighted_and_std_is_between_features\n assert_allclose(widths(axes[0]), [2.5, 50 / 3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 2 (50%)\nE Mismatch at index:\nE [1]: 16.0 (ACTUAL), 16.666666666666668 (DESIRED)\nE Max absolute difference among violations: 0.66666667\nE Max relative difference among violations: 0.04\nE ACTUAL: array([ 2.5, 16. ])\nE DESIRED: array([ 2.5 , 16.666667])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_error_family_mean_is_feature_weighted_and_std_is_between_features\n1 failed, 65 deselected in 0.90s\n", + "stderr": "" + } + }, + { + "name": "M05_ae_as_pca", + "method": "plot_ae_vs_pca", + "selection": "ae_pca_comparison", + "changed_lines": [ + 1235, + 1236 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "4490d68bd49df52e8e3e33fcd3f3deb6afafc15b43d98456789b3a77da97d69c", + "patch": "--- \n+++ \n@@ -1233,7 +1233,7 @@\n for _, row in ae_df.iterrows():\n # Chaque AE est repr\u00e9sent\u00e9 par une ligne horizontale de performance.\n ax.axhline(\n- row[\"mse_mean\"], color=\"#DD8452\", ls=\"--\", lw=2, label=row[\"method\"]\n+ pca_df[\"mse_mean\"].iloc[0], color=\"#DD8452\", ls=\"--\", lw=2, label=row[\"method\"]\n )\n ax.annotate(\n # Position d'annotation choisie pour rester lisible sur la courbe PCA.\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "ae_pca_comparison", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n1 passed, 65 deselected in 0.69s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "ae_pca_comparison", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:277: in test_ae_pca_comparison_does_not_substitute_metrics\n assert_allclose(ax.lines[1].get_ydata(), [0.17, 0.17])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE [1]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE Max absolute difference among violations: 0.73\nE Max relative difference among violations: 4.29411765\nE ACTUAL: array([0.9, 0.9])\nE DESIRED: array([0.17, 0.17])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_____________ test_ae_pca_comparison_does_not_substitute_metrics ______________\ntests\\test_dimred_visualizer.py:277: in test_ae_pca_comparison_does_not_substitute_metrics\n assert_allclose(ax.lines[1].get_ydata(), [0.17, 0.17])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE [1]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE Max absolute difference among violations: 0.73\nE Max relative difference among violations: 4.29411765\nE ACTUAL: array([0.9, 0.9])\nE DESIRED: array([0.17, 0.17])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_ae_pca_comparison_does_not_substitute_metrics\n1 failed, 65 deselected in 0.82s\n", + "stderr": "" + } + }, + { + "name": "M06_identity_reconstruction", + "method": "plot_ae_reconstruction", + "selection": "reconstruction_drawn_rows", + "changed_lines": [ + 1182 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "9d374b178f5f5ea7f05df0b08d34b31f12680c59bb26223a5818b649832fa9f4", + "patch": "--- \n+++ \n@@ -1179,7 +1179,7 @@\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n- recon = X_recon[si]\n+ recon = X[si]\n mse_i = float(np.mean((orig - recon) ** 2))\n ax.plot(x_pos, orig, color=\"#4C72B0\", lw=1.5, alpha=0.9, label=\"Original\")\n ax.plot(\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n3 passed, 63 deselected in 1.12s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:258: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 11.0 (ACTUAL), 12.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 4.0 (DESIRED)\nE Max absolute difference among violations: 2.\nE Max relative difference among violations: 0.5\nE ACTUAL: array([11., 2.])\nE DESIRED: array([12., 4.])" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:258: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 25.0 (DESIRED)\nE [1]: 43.0 (ACTUAL), 55.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.24\nE ACTUAL: array([19., 43.])\nE DESIRED: array([25., 55.])" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:258: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 3.0 (ACTUAL), 5.0 (DESIRED)\nE [1]: 17.0 (ACTUAL), 21.0 (DESIRED)\nE Max absolute difference among violations: 4.\nE Max relative difference among violations: 0.4\nE ACTUAL: array([ 3., 17.])\nE DESIRED: array([ 5., 21.])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFF [100%]\n================================== FAILURES ===================================\n______________ test_reconstruction_drawn_rows_and_manual_mse[1] _______________\ntests\\test_dimred_visualizer.py:258: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 11.0 (ACTUAL), 12.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 4.0 (DESIRED)\nE Max absolute difference among violations: 2.\nE Max relative difference among violations: 0.5\nE ACTUAL: array([11., 2.])\nE DESIRED: array([12., 4.])\n______________ test_reconstruction_drawn_rows_and_manual_mse[3] _______________\ntests\\test_dimred_visualizer.py:258: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 25.0 (DESIRED)\nE [1]: 43.0 (ACTUAL), 55.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.24\nE ACTUAL: array([19., 43.])\nE DESIRED: array([25., 55.])\n______________ test_reconstruction_drawn_rows_and_manual_mse[6] _______________\ntests\\test_dimred_visualizer.py:258: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 3.0 (ACTUAL), 5.0 (DESIRED)\nE [1]: 17.0 (ACTUAL), 21.0 (DESIRED)\nE Max absolute difference among violations: 4.\nE Max relative difference among violations: 0.4\nE ACTUAL: array([ 3., 17.])\nE DESIRED: array([ 5., 21.])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_reconstruction_drawn_rows_and_manual_mse[1]\nFAILED tests/test_dimred_visualizer.py::test_reconstruction_drawn_rows_and_manual_mse[3]\nFAILED tests/test_dimred_visualizer.py::test_reconstruction_drawn_rows_and_manual_mse[6]\n3 failed, 63 deselected in 1.33s\n", + "stderr": "" + } + }, + { + "name": "M07_hr_color_roll", + "method": "plot_hr_diagram_embedding", + "selection": "hr_finite_triplets", + "changed_lines": [ + 920, + 923 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "9747542c8f796dcfe2334714186a9d2f1f6a2e0de7604ec1c1feb5eddbce86b4", + "patch": "--- \n+++ \n@@ -920,7 +920,7 @@\n sc = ax.scatter(\n teff[valid],\n logg[valid],\n- c=z_coord[valid],\n+ c=np.roll(z_coord[valid], 1),\n cmap=self.cmap_continuous,\n s=2,\n alpha=0.5,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "hr_finite_triplets", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 907, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n2 passed, 64 deselected in 1.03s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "hr_finite_triplets", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:97: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 11.0 (DESIRED)\nE [1]: 11.0 (ACTUAL), 23.0 (DESIRED)\nE [2]: 23.0 (ACTUAL), 19.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.72727273\nE ACTUAL: MaskedArray([19., 11., 23.])\nE DESIRED: array([11., 23., 19.])" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:97: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 43.0 (ACTUAL), 2.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 5.0 (DESIRED)\nE [2]: 5.0 (ACTUAL), 43.0 (DESIRED)\nE Max absolute difference among violations: 41.\nE Max relative difference among violations: 20.5\nE ACTUAL: MaskedArray([43., 2., 5.])\nE DESIRED: array([ 2., 5., 43.])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 907, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________________ test_hr_finite_triplets_and_physical_axes[0] _________________\ntests\\test_dimred_visualizer.py:97: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 11.0 (DESIRED)\nE [1]: 11.0 (ACTUAL), 23.0 (DESIRED)\nE [2]: 23.0 (ACTUAL), 19.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.72727273\nE ACTUAL: MaskedArray([19., 11., 23.])\nE DESIRED: array([11., 23., 19.])\n________________ test_hr_finite_triplets_and_physical_axes[1] _________________\ntests\\test_dimred_visualizer.py:97: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 43.0 (ACTUAL), 2.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 5.0 (DESIRED)\nE [2]: 5.0 (ACTUAL), 43.0 (DESIRED)\nE Max absolute difference among violations: 41.\nE Max relative difference among violations: 20.5\nE ACTUAL: MaskedArray([43., 2., 5.])\nE DESIRED: array([ 2., 5., 43.])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_hr_finite_triplets_and_physical_axes[0]\nFAILED tests/test_dimred_visualizer.py::test_hr_finite_triplets_and_physical_axes[1]\n2 failed, 64 deselected in 1.21s\n", + "stderr": "" + } + }, + { + "name": "M08_cluster_colors", + "method": "plot_hdbscan_clusters", + "selection": "real_analyzer_state", + "changed_lines": [ + 1390, + 1393 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "4c7322cb7de655cb5ea317a71b8cec2ec4de336c2e1866b9f78c378a3ae00a1b", + "patch": "--- \n+++ \n@@ -1390,7 +1390,7 @@\n ax.scatter(\n Z[mask, 0],\n Z[mask, 1],\n- c=[color_map[cid]],\n+ c=[color_map[cluster_ids[-1]]],\n s=2,\n alpha=0.75,\n rasterized=True,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n3 passed, 63 deselected in 1.11s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:401: in test_hdbscan_real_analyzer_state_and_point_populations\n assert_allclose(sc.get_facecolors()[0, :3], hdb.color_map_[cid][:3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F.. [100%]\n================================== FAILURES ===================================\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels0] _______\ntests\\test_dimred_visualizer.py:401: in test_hdbscan_real_analyzer_state_and_point_populations\n assert_allclose(sc.get_facecolors()[0, :3], hdb.color_map_[cid][:3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels0]\n1 failed, 2 passed, 63 deselected in 1.25s\n", + "stderr": "" + } + }, + { + "name": "M09_tsne_as_umap", + "method": "plot_trustworthiness", + "selection": "real_sklearn_trustworthiness", + "changed_lines": [ + 2244 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "219f76a998ddc435edb3c68374e089462acdda0d735e2384192c4c04d16aab75", + "patch": "--- \n+++ \n@@ -2241,7 +2241,7 @@\n with warnings.catch_warnings():\n warnings.simplefilter(\"ignore\")\n tu = trustworthiness(X_sub, Zu_sub, n_neighbors=k, metric=\"euclidean\")\n- tt = trustworthiness(X_sub, Zt_sub, n_neighbors=k, metric=\"euclidean\")\n+ tt = trustworthiness(X_sub, Zu_sub, n_neighbors=k, metric=\"euclidean\")\n # Stocke T(k) pour les deux m\u00e9thodes afin de tracer la courbe comparative.\n trust_u.append(tu)\n trust_t.append(tt)\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n2 passed, 64 deselected in 2.66s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:594: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 24 / 24 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -1.14005850694597 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 0.8518760376374508 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: -0.9468537822225308 (ACTUAL), -0.6451940968015629 (DESIRED)\nE [1, 1]: -0.2999476978380483 (ACTUAL), 0.0825255266666682 (DESIRED)\nE [2, 0]: 0.7540394717615756 (ACTUAL), -0.11873997633083841 (DESIRED)\nE Max absolute difference among violations: 3.39499489\nE Max relative difference among violations: 13.23342732\nE ACTUAL: array([[-1.140059, 0.851876],\nE [-0.946854, -0.299948],\nE [ 0.754039, 1.994789],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-0.645194, 0.082526],\nE [-0.11874 , -1.400206],..." + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:594: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 18 / 18 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -1.14005850694597 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 0.8518760376374508 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: -1.215555026777933 (ACTUAL), -1.0861640144823521 (DESIRED)\nE [1, 1]: 0.13882201829008786 (ACTUAL), -0.5693158913378338 (DESIRED)\nE [2, 0]: -0.13429338949088465 (ACTUAL), -1.215555026777933 (DESIRED)\nE Max absolute difference among violations: 3.39499489\nE Max relative difference among violations: 7.48292869\nE ACTUAL: array([[-1.140059, 0.851876],\nE [-1.215555, 0.138822],\nE [-0.134293, 1.177617],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-1.086164, -0.569316],\nE [-1.215555, 0.138822],..." + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[12] ________\ntests\\test_dimred_visualizer.py:594: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 24 / 24 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -1.14005850694597 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 0.8518760376374508 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: -0.9468537822225308 (ACTUAL), -0.6451940968015629 (DESIRED)\nE [1, 1]: -0.2999476978380483 (ACTUAL), 0.0825255266666682 (DESIRED)\nE [2, 0]: 0.7540394717615756 (ACTUAL), -0.11873997633083841 (DESIRED)\nE Max absolute difference among violations: 3.39499489\nE Max relative difference among violations: 13.23342732\nE ACTUAL: array([[-1.140059, 0.851876],\nE [-0.946854, -0.299948],\nE [ 0.754039, 1.994789],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-0.645194, 0.082526],\nE [-0.11874 , -1.400206],...\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[9] _________\ntests\\test_dimred_visualizer.py:594: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 18 / 18 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -1.14005850694597 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 0.8518760376374508 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: -1.215555026777933 (ACTUAL), -1.0861640144823521 (DESIRED)\nE [1, 1]: 0.13882201829008786 (ACTUAL), -0.5693158913378338 (DESIRED)\nE [2, 0]: -0.13429338949088465 (ACTUAL), -1.215555026777933 (DESIRED)\nE Max absolute difference among violations: 3.39499489\nE Max relative difference among violations: 7.48292869\nE ACTUAL: array([[-1.140059, 0.851876],\nE [-1.215555, 0.138822],\nE [-0.134293, 1.177617],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-1.086164, -0.569316],\nE [-1.215555, 0.138822],...\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[12]\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[9]\n2 failed, 64 deselected in 2.92s\n", + "stderr": "" + } + }, + { + "name": "M10_confidence_constant", + "method": "plot_xgboost_umap", + "selection": "xgboost_classes_confidence", + "changed_lines": [ + 2095, + 2098 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "f1bb69629105b2443c7a96086390fc68bde21d1e395b2ea7129ac0dae024f231", + "patch": "--- \n+++ \n@@ -2095,7 +2095,7 @@\n sc = ax.scatter(\n Z_umap_aligned[:, 0],\n Z_umap_aligned[:, 1],\n- c=confidence,\n+ c=np.ones(len(confidence)),\n cmap=\"RdYlGn\",\n vmin=0.4,\n vmax=1.0,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n2 passed, 64 deselected in 0.99s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:522: in test_xgboost_classes_confidence_and_cluster_associations\n assert_array_equal(axes[1].collections[0].get_array(), confidence)\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 6 / 6 (100%)\nE First 5 mismatches are at indices:\nE [0]: 1.0 (ACTUAL), 0.45 (DESIRED)\nE [1]: 1.0 (ACTUAL), 0.7 (DESIRED)\nE [2]: 1.0 (ACTUAL), 0.95 (DESIRED)\nE [3]: 1.0 (ACTUAL), 0.6 (DESIRED)\nE [4]: 1.0 (ACTUAL), 0.8 (DESIRED)\nE Max absolute difference among violations: 0.55\nE Max relative difference among violations: 1.22222222\nE ACTUAL: MaskedArray([1., 1., 1., 1., 1., 1.])\nE DESIRED: array([0.45, 0.7 , 0.95, 0.6 , 0.8 , 0.5 ])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".F [100%]\n================================== FAILURES ===================================\n____ test_xgboost_classes_confidence_and_cluster_associations[confidence1] ____\ntests\\test_dimred_visualizer.py:522: in test_xgboost_classes_confidence_and_cluster_associations\n assert_array_equal(axes[1].collections[0].get_array(), confidence)\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 6 / 6 (100%)\nE First 5 mismatches are at indices:\nE [0]: 1.0 (ACTUAL), 0.45 (DESIRED)\nE [1]: 1.0 (ACTUAL), 0.7 (DESIRED)\nE [2]: 1.0 (ACTUAL), 0.95 (DESIRED)\nE [3]: 1.0 (ACTUAL), 0.6 (DESIRED)\nE [4]: 1.0 (ACTUAL), 0.8 (DESIRED)\nE Max absolute difference among violations: 0.55\nE Max relative difference among violations: 1.22222222\nE ACTUAL: MaskedArray([1., 1., 1., 1., 1., 1.])\nE DESIRED: array([0.45, 0.7 , 0.95, 0.6 , 0.8 , 0.5 ])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_xgboost_classes_confidence_and_cluster_associations[confidence1]\n1 failed, 1 passed, 64 deselected in 1.13s\n", + "stderr": "" + } + }, + { + "name": "M11_synthesis_ae_as_pca", + "method": "plot_synthesis_grid", + "selection": "synthesis_preserves", + "changed_lines": [ + 2887 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "4f007fdb7dcae0839188918aad4eb9f77662409d9c1413989ff8d3ddeed36082", + "patch": "--- \n+++ \n@@ -2884,7 +2884,7 @@\n if Z_umap is not None:\n # UMAP est optionnel selon le notebook ex\u00e9cut\u00e9.\n METHODS.append((\"UMAP\", Z_umap, \"UMAP 1\", \"UMAP 2\"))\n- METHODS.append((\"Autoencodeur\", Z_ae, \"Latent 1\", \"Latent 2\"))\n+ METHODS.append((\"Autoencodeur\", scores_pca, \"Latent 1\", \"Latent 2\"))\n \n PARAMS = [\n (\"Classe spectrale\", None, None),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n2 passed, 64 deselected in 0.92s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:666: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:666: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[False] ___\ntests\\test_dimred_visualizer.py:666: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[True] ____\ntests\\test_dimred_visualizer.py:666: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]\n2 failed, 64 deselected in 1.10s\n", + "stderr": "" + } + }, + { + "name": "M12_stability_median", + "method": "plot_stability", + "selection": "stability_producer", + "changed_lines": [ + 740, + 744 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "c521e47969b0df802a97ecf521f45fca1a471bac3804187362b0ac01038a728f", + "patch": "--- \n+++ \n@@ -741,7 +741,7 @@\n 0.98,\n 0.97,\n # Convention actuelle: on exclut souvent seed de r\u00e9f\u00e9rence (index 0) de la moyenne.\n- f\"Moyenne : {dists[1:].mean():.4f}\" if len(dists) > 1 else \"\",\n+ f\"Moyenne : {np.median(dists[1:]):.4f}\" if len(dists) > 1 else \"\",\n transform=ax.transAxes,\n ha=\"right\",\n va=\"top\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "stability_producer", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n1 passed, 65 deselected in 1.08s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "stability_producer", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:636: in test_stability_producer_order_and_mean_without_reference\n assert f\"{expected:.4f}\" in text(ax)\nE assert '0.0120' in 'Moyenne : 0.0057'\nE + where 'Moyenne : 0.0057' = text()" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n__________ test_stability_producer_order_and_mean_without_reference ___________\ntests\\test_dimred_visualizer.py:636: in test_stability_producer_order_and_mean_without_reference\n assert f\"{expected:.4f}\" in text(ax)\nE assert '0.0120' in 'Moyenne : 0.0057'\nE + where 'Moyenne : 0.0057' = text()\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_stability_producer_order_and_mean_without_reference\n1 failed, 65 deselected in 1.21s\n", + "stderr": "" + } + }, + { + "name": "M13_profile_sign_erased", + "method": "plot_hdbscan_feature_profiles", + "selection": "profiles_signed_top", + "changed_lines": [ + 2026 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "91e32e38df5eeff868d93e08f22bde30dfd975fd423fe2b1a239a738d636a7cc", + "patch": "--- \n+++ \n@@ -2023,7 +2023,7 @@\n profile = cluster_means.loc[cid]\n # Top-5 par amplitude absolue (exc\u00e8s ou d\u00e9ficit).\n top5 = profile.abs().nlargest(5).index.tolist()\n- vals = profile[top5].values\n+ vals = np.abs(profile[top5].values)\n colors = [\"#C0392B\" if v > 0 else \"#2980B9\" for v in vals]\n labels = [\n f.replace(\"feature_\", \"\").replace(\"_eq_width\", \"\\nEW\")[:14]\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "profiles_signed_top", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n1 passed, 65 deselected in 0.76s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "profiles_signed_top", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:493: in test_cluster_profiles_signed_top_five_not_first_five\n assert_allclose(widths(axes[0]), [2, 0.9, -0.6, 0.4, -0.1])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 5 (40%)\nE Mismatch at indices:\nE [2]: 0.6 (ACTUAL), -0.6 (DESIRED)\nE [4]: 0.1 (ACTUAL), -0.1 (DESIRED)\nE Max absolute difference among violations: 1.2\nE Max relative difference among violations: 2.\nE ACTUAL: array([2. , 0.9, 0.6, 0.4, 0.1])\nE DESIRED: array([ 2. , 0.9, -0.6, 0.4, -0.1])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_cluster_profiles_signed_top_five_not_first_five _____________\ntests\\test_dimred_visualizer.py:493: in test_cluster_profiles_signed_top_five_not_first_five\n assert_allclose(widths(axes[0]), [2, 0.9, -0.6, 0.4, -0.1])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 5 (40%)\nE Mismatch at indices:\nE [2]: 0.6 (ACTUAL), -0.6 (DESIRED)\nE [4]: 0.1 (ACTUAL), -0.1 (DESIRED)\nE Max absolute difference among violations: 1.2\nE Max relative difference among violations: 2.\nE ACTUAL: array([2. , 0.9, 0.6, 0.4, 0.1])\nE DESIRED: array([ 2. , 0.9, -0.6, 0.4, -0.1])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_cluster_profiles_signed_top_five_not_first_five\n1 failed, 65 deselected in 0.90s\n", + "stderr": "" + } + }, + { + "name": "M14_density_wrong_population", + "method": "plot_ae_error_distribution", + "selection": "histogram_densities", + "changed_lines": [ + 1324, + 1329 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "d5407d955fea773baff307002def63203823044aaeb4696dac2eed4d256b0523", + "patch": "--- \n+++ \n@@ -1326,7 +1326,7 @@\n bins=60,\n alpha=0.55,\n color=color,\n- density=True,\n+ density=False,\n label=f\"{cls} (n={mask.sum()}, \u03bc={vals.mean():.4f})\",\n )\n # M\u00e9diane trac\u00e9e pour robuste comparaison inter-classes.\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "histogram_densities", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n1 passed, 65 deselected in 1.56s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "histogram_densities", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:359: in test_histogram_densities_integrate_and_class_mean_median_are_distinct\n assert_allclose(sum(p.get_width() * p.get_height() for p in container), 1)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98333333\nE Max relative difference among violations: 0.98333333\nE ACTUAL: array(0.016667)\nE DESIRED: array(1)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____ test_histogram_densities_integrate_and_class_mean_median_are_distinct ____\ntests\\test_dimred_visualizer.py:359: in test_histogram_densities_integrate_and_class_mean_median_are_distinct\n assert_allclose(sum(p.get_width() * p.get_height() for p in container), 1)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98333333\nE Max relative difference among violations: 0.98333333\nE ACTUAL: array(0.016667)\nE DESIRED: array(1)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_histogram_densities_integrate_and_class_mean_median_are_distinct\n1 failed, 65 deselected in 1.03s\n", + "stderr": "" + } + }, + { + "name": "M15_kde_wrong_population", + "method": "plot_latent_kde", + "selection": "real_kde_reproducible", + "changed_lines": [ + 2401 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "91bfc71fabb5fb950157bfc2ac827c4aab3d866ca76c10d44bbf20516aa17911", + "patch": "--- \n+++ \n@@ -2398,7 +2398,7 @@\n from scipy.stats import gaussian_kde\n \n # KDE restreint \u00e0 la population stellaire pour une lecture astrophysique propre.\n- star_mask = y == \"STAR\"\n+ star_mask = np.ones(len(y), dtype=bool)\n Z_stars = Z_ae[star_mask]\n teff_s = (\n meta[\"teff_gspphot\"].values[star_mask].astype(float)\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n1 passed, 65 deselected in 2.53s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:735: in test_real_kde_reproducible_star_selection_and_observation_colors\n assert len(actual) == 119\nE assert 139 == 119\nE + where 139 = len(array([[ 1.46143263e+00, 5.04194549e-01],\\n [-1.58198440e-01, -4.02871589e-01],\\n [-5.12655840e-01, 8.0166....62051618e-01, -1.22073795e+00],\\n [-2.43641605e-01, -8.00208551e-01],\\n [-1.00969481e+00, 6.69136452e-01]]))" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_real_kde_reproducible_star_selection_and_observation_colors _______\ntests\\test_dimred_visualizer.py:735: in test_real_kde_reproducible_star_selection_and_observation_colors\n assert len(actual) == 119\nE assert 139 == 119\nE + where 139 = len(array([[ 1.46143263e+00, 5.04194549e-01],\\n [-1.58198440e-01, -4.02871589e-01],\\n [-5.12655840e-01, 8.0166....62051618e-01, -1.22073795e+00],\\n [-2.43641605e-01, -8.00208551e-01],\\n [-1.00969481e+00, 6.69136452e-01]]))\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_kde_reproducible_star_selection_and_observation_colors\n1 failed, 65 deselected in 2.54s\n", + "stderr": "" + } + }, + { + "name": "M16_export_blank_figure", + "method": "_save", + "selection": "real_export_readable", + "changed_lines": [ + 1018 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "c686947be404c32bf911a0cff410356af8ec385c229db14da4dc8ed8823359f1", + "patch": "--- \n+++ \n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ plt.figure().savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n2 passed, 64 deselected in 1.15s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:688: in test_real_export_readable_and_same_semantic_figure\n assert pixels.shape[0] > 100 and pixels.std() > 1\nE assert (250 > 100 and np.float64(0.0) > 1)\nE + where np.float64(0.0) = ()\nE + where = array([[[255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255],\\n ...,\\n [255, 255, 255],\\n ... ...,\\n [255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255]]], shape=(250, 330, 3), dtype=uint8).std" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F. [100%]\n================================== FAILURES ===================================\n___________ test_real_export_readable_and_same_semantic_figure[png] ___________\ntests\\test_dimred_visualizer.py:688: in test_real_export_readable_and_same_semantic_figure\n assert pixels.shape[0] > 100 and pixels.std() > 1\nE assert (250 > 100 and np.float64(0.0) > 1)\nE + where np.float64(0.0) = ()\nE + where = array([[[255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255],\\n ...,\\n [255, 255, 255],\\n ... ...,\\n [255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255]]], shape=(250, 330, 3), dtype=uint8).std\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_export_readable_and_same_semantic_figure[png]\n1 failed, 1 passed, 64 deselected in 1.08s\n", + "stderr": "" + } + } + ], + "executed_files_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/proofs_dimred_visualizer.py": "2ece4074314b52b26994bb1593e941e6b008e21d70dbc8de7b89d7fd6a3937fd", + "tests/visualizer_review_contracts.py": "a8add777477f11103850247cf348b3e5ff5e31faa1aaa932953645d3c3475a81", + "tests/test_visualizer_review_contracts.py": "1398f78f67090f47ed09f57bb0d12d1f49d7abfa781e57e39c5a4f50f251bbea" + }, + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_disclosure_identifies_the_relevant_exclusion_bound", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_localized_numbers_and_population_suffixes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_variance_claims_use_numbers_and_component_meaning", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[vertical]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[horizontal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_denominators_and_claims_are_distinguishable", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ".................................................................. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ag68xgps\\result.xml -\n66 passed in 16.52s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_r3_final_results.json b/audit/m28_r3_final_results.json new file mode 100644 index 0000000..f4d6aab --- /dev/null +++ b/audit/m28_r3_final_results.json @@ -0,0 +1,35702 @@ +{ + "active_head": "e924f36f24412a435f5ca54a95cdfad914835ff2", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "working_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/proofs_dimred_visualizer.py": "2ece4074314b52b26994bb1593e941e6b008e21d70dbc8de7b89d7fd6a3937fd", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "a8add777477f11103850247cf348b3e5ff5e31faa1aaa932953645d3c3475a81", + "tests/test_visualizer_review_contracts.py": "1398f78f67090f47ed09f57bb0d12d1f49d7abfa781e57e39c5a4f50f251bbea" + }, + "proofs_ref": null, + "runner_lf_sha256": "9a2a2e41e9e87a965f6f345432f619db60c697456d883a3b3a56f6ba4c8540e9", + "runs": [ + { + "name": "C13", + "selection": "kde_labeled_regions", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "29d8c4c1e860508b96cdce82bf78feba2c48b5f74fb65984d9736dc44c8ddfee", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 87 deselected in 16.03s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n5 passed, 87 deselected in 25.52s\n", + "stderr": "" + } + }, + { + "name": "K4", + "selection": "kde_labeled_regions", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,15 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ draws = kde.resample(200000, seed=np.random.default_rng(7))\n+ density = kde.evaluate(draws)\n+ levels = sorted(float(np.quantile(density,1-p)) for p in [.99,.95,.68])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "f5353c35e24c3908f14540eb69100b0026502a508ea8e34823764b12bca1ecb7", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 87 deselected in 16.65s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2442, + 2443, + 2444, + 2445, + 2448, + 2449, + 2450, + 2452, + 2453, + 2454, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2469, + 2470, + 2472, + 2473, + 2475, + 2476, + 2478, + 2480, + 2481, + 2482, + 2483, + 2484, + 2485, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2493, + 2494, + 2495, + 2496, + 2497, + 2498, + 2499, + 2501, + 2502, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2512, + 2518, + 2657, + 2662, + 2663, + 2786, + 2790, + 2848, + 2854, + 2855, + 2968, + 2971 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n5 passed, 87 deselected in 26.74s\n", + "stderr": "" + } + }, + { + "name": "K5", + "selection": "kde_labeled_regions", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,20 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ sigma = np.sqrt(np.diag(kde.covariance))\n+ qx = np.linspace(kde.dataset[0].min()-4*sigma[0],kde.dataset[0].max()+4*sigma[0],500)\n+ qy = np.linspace(kde.dataset[1].min()-4*sigma[1],kde.dataset[1].max()+4*sigma[1],500)\n+ a,b = np.meshgrid(qx,qy)\n+ density = kde(np.vstack([a.ravel(),b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "ae151ba113c3b6bbaf69e6bc068592e34087bd1c03b58c4f5ea8281b75c44d42", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 87 deselected in 16.00s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2442, + 2443, + 2444, + 2445, + 2447, + 2448, + 2449, + 2450, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2461, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2474, + 2475, + 2477, + 2478, + 2480, + 2481, + 2483, + 2485, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2506, + 2507, + 2509, + 2510, + 2511, + 2513, + 2514, + 2515, + 2517, + 2523, + 2662, + 2667, + 2668, + 2791, + 2795, + 2853, + 2859, + 2860, + 2973, + 2976 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n5 passed, 87 deselected in 28.89s\n", + "stderr": "" + } + }, + { + "name": "K1B", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,14 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ peak=float(ZZ.max())\n+ levels=sorted((1-p)*peak for p in [.99,.95,.68])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "c7440409300cf121262065ba00ef3d8ec697b80fd48d35bae00e9d1e10bccafe", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n5 passed, 87 deselected in 25.35s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01325009\nE Max relative difference among violations: 0.01948543\nE ACTUAL: array(0.66675)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.06514077\nE Max relative difference among violations: 0.09579524\nE ACTUAL: array(0.614859)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 95% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00763319\nE Max relative difference among violations: 0.00803493\nE ACTUAL: array(0.957633)\nE DESIRED: array(0.95)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.07977581\nE Max relative difference among violations: 0.11731737\nE ACTUAL: array(0.600224)\nE DESIRED: array(0.68)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2436, + 2437, + 2438, + 2439, + 2441, + 2442, + 2443, + 2444, + 2447, + 2448, + 2449, + 2451, + 2452, + 2453, + 2455, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2466, + 2468, + 2469, + 2471, + 2472, + 2474, + 2475, + 2477, + 2479, + 2480, + 2481, + 2482, + 2483, + 2484, + 2485, + 2486, + 2487, + 2488, + 2489, + 2490, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2498, + 2500, + 2501, + 2503, + 2504, + 2505, + 2507, + 2508, + 2509, + 2511, + 2517, + 2656, + 2661, + 2662, + 2785, + 2789, + 2847, + 2853, + 2854, + 2967, + 2970 + ], + "stdout": "F.FFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01325009\nE Max relative difference among violations: 0.01948543\nE ACTUAL: array(0.66675)\nE DESIRED: array(0.68)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.06514077\nE Max relative difference among violations: 0.09579524\nE ACTUAL: array(0.614859)\nE DESIRED: array(0.68)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 95% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00763319\nE Max relative difference among violations: 0.00803493\nE ACTUAL: array(0.957633)\nE DESIRED: array(0.95)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.07977581\nE Max relative difference among violations: 0.11731737\nE ACTUAL: array(0.600224)\nE DESIRED: array(0.68)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n4 failed, 1 passed, 87 deselected in 18.55s\n", + "stderr": "" + } + }, + { + "name": "K6", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2475 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2485,7 +2476,7 @@\n cs,\n # Labels textuels 99/95/68% align\u00e9s aux niveaux calcul\u00e9s.\n fmt={\n- lv: nm for lv, nm in zip(levels, [\"99%\", \"95%\", \"68%\"][-n_lv:])\n+ lv: nm for lv, nm in zip(levels, [\"68%\", \"95%\", \"99%\"][-n_lv:])\n },\n fontsize=7,\n inline=True,\n", + "candidate_sha256": "0473bb1fd282d2ae32f067cc1cd2885486cf75b9cfc70ccd7fae3dd9aacc0ebf", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n5 passed, 87 deselected in 24.25s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3100187\nE Max relative difference among violations: 0.45590985\nE ACTUAL: array(0.990019)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997108\nE Max relative difference among violations: 0.45583983\nE ACTUAL: array(0.989971)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997656\nE Max relative difference among violations: 0.45584788\nE ACTUAL: array(0.989977)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31000088\nE Max relative difference among violations: 0.45588364\nE ACTUAL: array(0.990001)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31002934\nE Max relative difference among violations: 0.4559255\nE ACTUAL: array(0.990029)\nE DESIRED: array(0.68)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3100187\nE Max relative difference among violations: 0.45590985\nE ACTUAL: array(0.990019)\nE DESIRED: array(0.68)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997108\nE Max relative difference among violations: 0.45583983\nE ACTUAL: array(0.989971)\nE DESIRED: array(0.68)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997656\nE Max relative difference among violations: 0.45584788\nE ACTUAL: array(0.989977)\nE DESIRED: array(0.68)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31000088\nE Max relative difference among violations: 0.45588364\nE ACTUAL: array(0.990001)\nE DESIRED: array(0.68)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31002934\nE Max relative difference among violations: 0.4559255\nE ACTUAL: array(0.990029)\nE DESIRED: array(0.68)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 87 deselected in 21.90s\n", + "stderr": "" + } + }, + { + "name": "K7", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2424 + ], + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ] + ], + "patch": "--- \n+++ \n@@ -2421,33 +2421,24 @@\n # Sous-\u00e9chantillon pour stabiliser le co\u00fbt de la KDE.\n idx = rng.choice(len(Z_stars), N_KDE, replace=False)\n logger.info(\"Calcul KDE sur %d \u00e9toiles...\", N_KDE)\n- kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n+ kde = gaussian_kde(Z_ae.T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "5c14d1ded1f2fe64555f2b2c4a9b034c375610f1fbbad8333c1474264a5a096e", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n5 passed, 87 deselected in 24.19s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000002C6AD3ABBC0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000002C6ADB625E0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000002C6A7CF5380>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "..FFF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000002C6AD3ABBC0>)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000002C6ADB625E0>)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000002C6A7CF5380>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n3 failed, 2 passed, 87 deselected in 13.05s\n", + "stderr": "" + } + }, + { + "name": "K8", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2465 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2474,7 +2465,7 @@\n cs = ax.contour(\n XX,\n YY,\n- ZZ,\n+ ZZ.T,\n levels=levels,\n colors=[\"#4A4A4A\", \"#2A2A2A\", \"#0A0A0A\"][-n_lv:],\n linewidths=[0.8, 1.2, 1.8][-n_lv:],\n", + "candidate_sha256": "c833f6f75c4e376a04cc2eea5031910643373a69836d06cd20e56e18f97f664b", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n5 passed, 87 deselected in 23.77s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01294495\nE Max relative difference among violations: 0.0130757\nE ACTUAL: array(0.977055)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:173: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0.05, atol=1e-10\nE Contour vertices are not on the fitted STAR iso-density\nE Mismatched elements: 425 / 457 (93%)\nE First 5 mismatches are at indices:\nE [0]: 8.749356970086692e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [1]: 8.648096934890717e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [2]: 8.559249232877267e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [3]: 8.481673619124976e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [4]: 8.414570496859691e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE Max absolute difference among violations: 0.00044197\nE Max relative difference among violations: 1.66420284\nE ACTUAL: array([8.749357e-05, 8.648097e-05, 8.559249e-05, 8.481674e-05,\nE 8.414570e-05, 8.357454e-05, 8.310137e-05, 8.272715e-05,\nE 8.245573e-05, 8.229383e-05, 8.229396e-05, 8.204398e-05,...\nE DESIRED: array(0.000266)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.22685682\nE Max relative difference among violations: 0.2291483\nE ACTUAL: array(0.763143)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3138107\nE Max relative difference among violations: 0.31698051\nE ACTUAL: array(0.676189)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.27101919\nE Max relative difference among violations: 0.27375676\nE ACTUAL: array(0.718981)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01294495\nE Max relative difference among violations: 0.0130757\nE ACTUAL: array(0.977055)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:173: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0.05, atol=1e-10\nE Contour vertices are not on the fitted STAR iso-density\nE Mismatched elements: 425 / 457 (93%)\nE First 5 mismatches are at indices:\nE [0]: 8.749356970086692e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [1]: 8.648096934890717e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [2]: 8.559249232877267e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [3]: 8.481673619124976e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [4]: 8.414570496859691e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE Max absolute difference among violations: 0.00044197\nE Max relative difference among violations: 1.66420284\nE ACTUAL: array([8.749357e-05, 8.648097e-05, 8.559249e-05, 8.481674e-05,\nE 8.414570e-05, 8.357454e-05, 8.310137e-05, 8.272715e-05,\nE 8.245573e-05, 8.229383e-05, 8.229396e-05, 8.204398e-05,...\nE DESIRED: array(0.000266)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.22685682\nE Max relative difference among violations: 0.2291483\nE ACTUAL: array(0.763143)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3138107\nE Max relative difference among violations: 0.31698051\nE ACTUAL: array(0.676189)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.27101919\nE Max relative difference among violations: 0.27375676\nE ACTUAL: array(0.718981)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 87 deselected in 22.54s\n", + "stderr": "" + } + }, + { + "name": "K9", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2465 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2474,7 +2465,7 @@\n cs = ax.contour(\n XX,\n YY,\n- ZZ,\n+ np.ma.masked_where(XX > 3, ZZ),\n levels=levels,\n colors=[\"#4A4A4A\", \"#2A2A2A\", \"#0A0A0A\"][-n_lv:],\n linewidths=[0.8, 1.2, 1.8][-n_lv:],\n", + "candidate_sha256": "7371291f3dffc0a862a6f8af606664cd85a80726f6d05444494d29a5f3e3c15a", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n5 passed, 87 deselected in 23.82s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.05631876\nE Max relative difference among violations: 0.05688764\nE ACTUAL: array(0.933681)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.06331658\nE Max relative difference among violations: 0.06395614\nE ACTUAL: array(0.926683)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.29256688\nE Max relative difference among violations: 0.2955221\nE ACTUAL: array(0.697433)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30004933\nE Max relative difference among violations: 0.30308013\nE ACTUAL: array(0.689951)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30314268\nE Max relative difference among violations: 0.30620472\nE ACTUAL: array(0.686857)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.05631876\nE Max relative difference among violations: 0.05688764\nE ACTUAL: array(0.933681)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.06331658\nE Max relative difference among violations: 0.06395614\nE ACTUAL: array(0.926683)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.29256688\nE Max relative difference among violations: 0.2955221\nE ACTUAL: array(0.697433)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30004933\nE Max relative difference among violations: 0.30308013\nE ACTUAL: array(0.689951)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30314268\nE Max relative difference among violations: 0.30620472\nE ACTUAL: array(0.686857)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 87 deselected in 22.29s\n", + "stderr": "" + } + }, + { + "name": "AD05", + "selection": "cluster_colorbar", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1420, + 1421, + 1422 + ], + [ + 1564, + 1565, + 1566 + ] + ], + "patch": "--- \n+++ \n@@ -1417,9 +1417,9 @@\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n- plt.colorbar(\n- sm, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n- ).ax.tick_params(labelsize=8)\n+ ax.legend(handles=[mpatches.Patch(color=color_map[c],label=f\"C{c}\") for c in cluster_ids])\n+ for annotation in list(ax.texts):\n+ annotation.remove()\n ax.text(\n 0.02,\n 0.98,\n@@ -1561,9 +1561,9 @@\n cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n )\n sm2.set_array([])\n- plt.colorbar(\n- sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n- ).ax.tick_params(labelsize=8)\n+ ax.legend(handles=[mpatches.Patch(color=color_map[c],label=f\"C{c}\") for c in cluster_ids])\n+ for annotation in list(ax.texts):\n+ annotation.remove()\n \n ax2 = axes[1]\n valid_teff = np.isfinite(teff)\n", + "candidate_sha256": "6b87a55bafb24be9782e14af82259b4b66f426cb9f4bcf689d5f08adc7fb82bb", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n2 failed, 90 deselected in 1.37s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n2 passed, 90 deselected in 1.14s\n", + "stderr": "" + } + }, + { + "name": "AC05", + "selection": "cluster_colorbar", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1415 + ], + [ + 1560 + ] + ], + "patch": "--- \n+++ \n@@ -1413,7 +1413,7 @@\n ),\n )\n sm = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n@@ -1558,7 +1558,7 @@\n )\n ax.grid(True, alpha=0.2)\n sm2 = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm2.set_array([])\n plt.colorbar(\n", + "candidate_sha256": "0ca8b2a77d45ca5e7e0c55444c021152cb005d5ef896b2725e86fabf00358c95", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n2 failed, 90 deselected in 1.36s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n2 passed, 90 deselected in 1.18s\n", + "stderr": "" + } + }, + { + "name": "FD02", + "selection": "hr_region_vertices", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 3206, + 3207 + ] + ], + "patch": "--- \n+++ \n@@ -3203,7 +3203,8 @@\n ax.invert_xaxis()\n ax.invert_yaxis()\n ax.set_xlim(T_HI + T_PAD * 5, T_LO - T_PAD * 5)\n- ax.set_ylim(G_HI + G_PAD * 5, G_LO - G_PAD * 5)\n+ _ys = [v[1] for r in REGIONS for v in r[\"poly\"]]\n+ ax.set_ylim(max(G_HI+G_PAD*5,max(_ys)),min(G_LO-G_PAD*5,min(_ys)))\n \n ax.xaxis.set_major_formatter(\n FuncFormatter(lambda x, _: f\"{int(x):,}\".replace(\",\", \"\\u202f\"))\n", + "candidate_sha256": "3b7b864ec4aca8ebe8af3fcb887b29c87e31fa8c150f1fa6654320fe9678d13f", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982, + 2995, + 2996, + 2997, + 2999, + 3000, + 3004, + 3005, + 3006, + 3011, + 3012, + 3013, + 3014, + 3016, + 3017, + 3026, + 3027, + 3028, + 3031, + 3034, + 3035, + 3037, + 3038, + 3039, + 3040, + 3041, + 3042, + 3043, + 3044, + 3046, + 3047, + 3048, + 3049, + 3050, + 3052, + 3053, + 3054, + 3055, + 3056, + 3057, + 3058, + 3060, + 3064, + 3065, + 3066, + 3067, + 3068, + 3069, + 3070, + 3071, + 3073, + 3074, + 3075, + 3076, + 3077, + 3078, + 3082, + 3083, + 3084, + 3085, + 3086, + 3087, + 3088, + 3089, + 3091, + 3092, + 3093, + 3094, + 3095, + 3096, + 3097, + 3101, + 3102, + 3103, + 3104, + 3105, + 3106, + 3107, + 3108, + 3110, + 3111, + 3112, + 3113, + 3114, + 3115, + 3116, + 3122, + 3125, + 3138, + 3139, + 3140, + 3141, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3151, + 3152, + 3153, + 3156, + 3157, + 3158, + 3159, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3167, + 3168, + 3169, + 3170, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3184, + 3185, + 3186, + 3187, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3199, + 3200, + 3201, + 3202, + 3204, + 3205, + 3207, + 3208, + 3209, + 3210, + 3212, + 3213, + 3215, + 3216, + 3218, + 3219 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n1 passed, 91 deselected in 0.98s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3207, + 3209, + 3210, + 3212, + 3213, + 3214, + 3215, + 3217, + 3218, + 3220, + 3221, + 3223, + 3224 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 91 deselected in 1.11s\n", + "stderr": "" + } + }, + { + "name": "FD09", + "selection": "more_reconstructions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1179, + 1180 + ] + ], + "patch": "--- \n+++ \n@@ -1176,6 +1176,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in list(axes)[len(idx):]:\n+ unused.plot([],[])\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n", + "candidate_sha256": "4ea4c2c1cbbd94860f59f7598eb65acf8e60297e3c9467d5d4297b41a24cc57c", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1090, + 1164, + 1165, + 1169, + 1171, + 1172, + 1173, + 1175, + 1177, + 1178, + 1179, + 1180, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1195, + 1196, + 1197, + 1200, + 1201, + 1202, + 1203, + 1205, + 1206, + 1207, + 1208, + 1209, + 1211, + 1212, + 1215, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n1 passed, 91 deselected in 0.73s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 1 >= 2\nE + where 1 = len()\nE + where = .lines" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1180, + 1181, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1196, + 1197, + 1198, + 1201, + 1202, + 1203, + 1204, + 1206, + 1207, + 1208, + 1209, + 1210, + 1212, + 1213, + 1216, + 1218, + 1258, + 1263, + 1264, + 1265, + 1317, + 1354, + 1359, + 1473, + 1478, + 1599, + 1602, + 1603, + 1604, + 1641, + 1646, + 1774, + 1779, + 1780, + 1954, + 1958, + 1959, + 2005, + 2009, + 2010, + 2057, + 2064, + 2164, + 2168, + 2216, + 2221, + 2222, + 2223, + 2290, + 2295, + 2392, + 2397, + 2529, + 2535, + 2674, + 2679, + 2680, + 2803, + 2807, + 2865, + 2871, + 2872, + 2985, + 2988 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 1 >= 2\nE + where 1 = len()\nE + where = .lines\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n1 failed, 91 deselected in 0.94s\n", + "stderr": "" + } + }, + { + "name": "FD11", + "selection": "log_histogram_keeps", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2823 + ], + [ + 2834 + ] + ], + "patch": "--- \n+++ \n@@ -2821,7 +2821,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(vals.min()), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n@@ -2832,7 +2832,7 @@\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n ax.hist(\n- vals,\n+ vals[vals>=1e-4] if xscale==\"log\" else vals,\n bins=bins,\n alpha=0.55,\n color=color,\n", + "candidate_sha256": "5930c4566f006317d795d17c7abe043d19c32f3977f5b56b6ed5a0ca90ea9c53", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n1 passed, 91 deselected in 1.31s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:355: in test_log_histogram_keeps_small_positive_errors\n missing, edges = visualizer_contracts.assert_histogram_population(call, errors)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests\\visualizer_review_contracts.py:175: in assert_histogram_population\n assert_array_equal(\nE AssertionError: \nE Arrays are not equal\nE Histogram omitted observations inside its own displayed support\nE Mismatched elements: 3 / 59 (5.08%)\nE Mismatch at indices:\nE [0]: 0 (ACTUAL), 1 (DESIRED)\nE [7]: 0 (ACTUAL), 1 (DESIRED)\nE [14]: 0 (ACTUAL), 1 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 1.\nE ACTUAL: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\nE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\nE 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])\nE DESIRED: array([1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\nE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\nE 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:355: in test_log_histogram_keeps_small_positive_errors\n missing, edges = visualizer_contracts.assert_histogram_population(call, errors)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests\\visualizer_review_contracts.py:175: in assert_histogram_population\n assert_array_equal(\nE AssertionError: \nE Arrays are not equal\nE Histogram omitted observations inside its own displayed support\nE Mismatched elements: 3 / 59 (5.08%)\nE Mismatch at indices:\nE [0]: 0 (ACTUAL), 1 (DESIRED)\nE [7]: 0 (ACTUAL), 1 (DESIRED)\nE [14]: 0 (ACTUAL), 1 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 1.\nE ACTUAL: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\nE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\nE 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])\nE DESIRED: array([1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\nE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\nE 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\n1 failed, 91 deselected in 1.40s\n", + "stderr": "" + } + }, + { + "name": "FD12", + "selection": "fifth_class", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1334, + 1335 + ] + ], + "patch": "--- \n+++ \n@@ -1331,6 +1331,8 @@\n )\n # M\u00e9diane trac\u00e9e pour robuste comparaison inter-classes.\n ax.axvline(np.median(vals), color=color, lw=2, ls=\"--\")\n+ for cls in classes[len(palette):]:\n+ ax.plot([],[],label=f\"{cls} (n={(y==cls).sum()})\")\n ax.set_xlabel(\"MSE de reconstruction\")\n ax.set_ylabel(\"Densit\u00e9\")\n ax.set_title(\"Distribution des erreurs de reconstruction par classe\")\n", + "candidate_sha256": "b37519ab25fa7ab3c9c4c6b3368adfb81196d35d6674894e44ebb03e95c431b8", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "fifth_class", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1316, + 1317, + 1318, + 1319, + 1320, + 1321, + 1323, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1332, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1343, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n1 passed, 91 deselected in 0.94s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "fifth_class", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:379: in test_histogram_does_not_silently_omit_fifth_class\n assert len(calls) == 5, \"Legend-only classes are not histogram populations\"\nE AssertionError: Legend-only classes are not histogram populations\nE assert 4 == 5\nE + where 4 = len([{'ax': . at 0x00000223AC5BBBC0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 N = 43 019\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x00000223EE81B760>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 N = 43 019\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x00000223AC5BBBC0>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 N = 43 019\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x00000223EE81B760>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\n2 failed, 90 deselected in 1.27s\n", + "stderr": "" + } + }, + { + "name": "FD10", + "selection": "truncated_variance_annotation", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 185 + ] + ], + "patch": "--- \n+++ \n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"\u2192 {cumvar[idx]*100:.1f}% avec {n_thresh} PCs\",\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n", + "candidate_sha256": "ab46a5dc5c97949be4f23c049415f85d0382a5329b53ab18a21b04f448ec7484", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "truncated_variance_annotation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n1 passed, 91 deselected in 0.74s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "truncated_variance_annotation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\n1 failed, 91 deselected in 0.89s\n", + "stderr": "" + } + }, + { + "name": "N01", + "selection": "xgboost_classes_confidence", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2076 + ] + ], + "patch": "--- \n+++ \n@@ -2081,7 +2081,7 @@\n alpha=0.55,\n linewidths=0,\n rasterized=True,\n- label=f\"{cls} (n={mask.sum()})\",\n+ label=f\"{classes_pred[(classes_pred.index(cls)+1)%len(classes_pred)]} (n={mask.sum()})\",\n )\n ax.legend(markerscale=4, fontsize=9, framealpha=0.9)\n ax.set_title(\"Pr\u00e9dictions XGBoost\", fontsize=12, fontweight=\"bold\")\n", + "candidate_sha256": "50853fb90afce1cf5e8b4cb4d8fca701b582b3dedb44bb9550aa5c455514ae8f", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2064, + 2067, + 2068, + 2069, + 2071, + 2072, + 2073, + 2075, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2085, + 2086, + 2087, + 2088, + 2089, + 2091, + 2092, + 2094, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2106, + 2107, + 2109, + 2112, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2121, + 2122, + 2124, + 2125, + 2127, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2136, + 2137, + 2139, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2148, + 2149, + 2150, + 2152, + 2153, + 2154, + 2155, + 2157, + 2158, + 2159, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n2 passed, 90 deselected in 1.03s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:511: in test_xgboost_classes_confidence_and_cluster_associations\n assert re.search(\nE AssertionError: Prediction label differs from its actual points\nE assert None\nE + where None = ('\\\\bF\\\\b', 'G (n=3)')\nE + where = .search\nE + and 'G (n=3)' = get_label()\nE + where get_label = .get_label" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:511: in test_xgboost_classes_confidence_and_cluster_associations\n assert re.search(\nE AssertionError: Prediction label differs from its actual points\nE assert None\nE + where None = ('\\\\bF\\\\b', 'G (n=3)')\nE + where = .search\nE + and 'G (n=3)' = get_label()\nE + where get_label = .get_label" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n_______ test_xgboost_classes_confidence_and_cluster_associations[None] ________\ntests\\test_dimred_visualizer.py:511: in test_xgboost_classes_confidence_and_cluster_associations\n assert re.search(\nE AssertionError: Prediction label differs from its actual points\nE assert None\nE + where None = ('\\\\bF\\\\b', 'G (n=3)')\nE + where = .search\nE + and 'G (n=3)' = get_label()\nE + where get_label = .get_label\n____ test_xgboost_classes_confidence_and_cluster_associations[confidence1] ____\ntests\\test_dimred_visualizer.py:511: in test_xgboost_classes_confidence_and_cluster_associations\n assert re.search(\nE AssertionError: Prediction label differs from its actual points\nE assert None\nE + where None = ('\\\\bF\\\\b', 'G (n=3)')\nE + where = .search\nE + and 'G (n=3)' = get_label()\nE + where get_label = .get_label\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_xgboost_classes_confidence_and_cluster_associations[None]\nFAILED tests/test_dimred_visualizer.py::test_xgboost_classes_confidence_and_cluster_associations[confidence1]\n2 failed, 90 deselected in 1.24s\n", + "stderr": "" + } + }, + { + "name": "N02", + "selection": "real_analyzer_state", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1445 + ] + ], + "patch": "--- \n+++ \n@@ -1449,7 +1449,7 @@\n marker=CLASS_MARKERS.get(cls, \"o\"),\n s=2,\n alpha=0.45,\n- label=f\"{cls} (n={mask.sum()})\",\n+ label=f\"{np.unique(y)[(list(np.unique(y)).index(cls)+1)%len(np.unique(y))]} (n={mask.sum()})\",\n rasterized=True,\n linewidths=0,\n )\n", + "candidate_sha256": "88d7e6f3129fd84d22c03d7ab14f92793c96b9580c2ac5937eba0efda98740a3", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1359, + 1360, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1371, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1386, + 1387, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1414, + 1415, + 1417, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1426, + 1427, + 1428, + 1429, + 1430, + 1432, + 1433, + 1434, + 1435, + 1437, + 1440, + 1441, + 1442, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1455, + 1456, + 1457, + 1458, + 1460, + 1461, + 1462, + 1463, + 1464, + 1466, + 1467, + 1468, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n3 passed, 89 deselected in 1.08s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:406: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:406: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:406: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFF [100%]\n================================== FAILURES ===================================\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels0] _______\ntests\\test_dimred_visualizer.py:406: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels1] _______\ntests\\test_dimred_visualizer.py:406: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels2] _______\ntests\\test_dimred_visualizer.py:406: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels0]\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels1]\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels2]\n3 failed, 89 deselected in 1.35s\n", + "stderr": "" + } + }, + { + "name": "N04", + "selection": "synthesis_preserves", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2966 + ] + ], + "patch": "--- \n+++ \n@@ -2964,7 +2964,7 @@\n ax.set_xlabel(xlabel, fontsize=8)\n if col == 0:\n ax.set_ylabel(\n- f\"{method_name}\\n{ylabel}\", fontsize=9, fontweight=\"bold\"\n+ f\"{METHODS[-1-row][0]}\\n{ylabel}\", fontsize=9, fontweight=\"bold\"\n )\n else:\n ax.set_ylabel(ylabel, fontsize=8)\n", + "candidate_sha256": "582917faca6080dc0e4f1c28c85117c5c52d80e53223745247f2630bdb8eba88", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2869, + 2871, + 2872, + 2873, + 2874, + 2875, + 2877, + 2879, + 2880, + 2882, + 2883, + 2885, + 2891, + 2892, + 2893, + 2894, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2906, + 2907, + 2908, + 2909, + 2911, + 2912, + 2913, + 2914, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2924, + 2926, + 2928, + 2930, + 2931, + 2932, + 2942, + 2943, + 2944, + 2945, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2954, + 2955, + 2956, + 2957, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2966, + 2967, + 2968, + 2970, + 2971, + 2973, + 2974, + 2976, + 2977, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n2 passed, 90 deselected in 0.95s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:664: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert re.search(expected_name, data_axes[row * 3].get_ylabel(), re.I)\nE AssertionError: assert None\nE + where None = ('\\\\bPCA\\\\b', 'Autoencodeur\\nPC2', re.IGNORECASE)\nE + where = .search\nE + and 'Autoencodeur\\nPC2' = get_ylabel()\nE + where get_ylabel = .get_ylabel\nE + and re.IGNORECASE = .I" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:664: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert re.search(expected_name, data_axes[row * 3].get_ylabel(), re.I)\nE AssertionError: assert None\nE + where None = ('\\\\bPCA\\\\b', 'Autoencodeur\\nPC2', re.IGNORECASE)\nE + where = .search\nE + and 'Autoencodeur\\nPC2' = get_ylabel()\nE + where get_ylabel = .get_ylabel\nE + and re.IGNORECASE = .I" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[False] ___\ntests\\test_dimred_visualizer.py:664: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert re.search(expected_name, data_axes[row * 3].get_ylabel(), re.I)\nE AssertionError: assert None\nE + where None = ('\\\\bPCA\\\\b', 'Autoencodeur\\nPC2', re.IGNORECASE)\nE + where = .search\nE + and 'Autoencodeur\\nPC2' = get_ylabel()\nE + where get_ylabel = .get_ylabel\nE + and re.IGNORECASE = .I\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[True] ____\ntests\\test_dimred_visualizer.py:664: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert re.search(expected_name, data_axes[row * 3].get_ylabel(), re.I)\nE AssertionError: assert None\nE + where None = ('\\\\bPCA\\\\b', 'Autoencodeur\\nPC2', re.IGNORECASE)\nE + where = .search\nE + and 'Autoencodeur\\nPC2' = get_ylabel()\nE + where get_ylabel = .get_ylabel\nE + and re.IGNORECASE = .I\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]\n2 failed, 90 deselected in 1.13s\n", + "stderr": "" + } + }, + { + "name": "N10", + "selection": "real_sklearn_trustworthiness", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2236 + ] + ], + "patch": "--- \n+++ \n@@ -2233,7 +2233,7 @@\n idx = rng.choice(len(X_ref), size=n, replace=False)\n X_sub = X_ref[idx]\n Zu_sub = Z_umap[idx]\n- Zt_sub = Z_tsne[idx]\n+ Zt_sub = Z_tsne[np.roll(idx,1)]\n \n trust_u, trust_t = [], []\n for k in k_values:\n", + "candidate_sha256": "9a92851045aa8e4839b1923d4d613d9f6a4c578cca63944ccfd78d6874c17396", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2223, + 2224, + 2226, + 2229, + 2230, + 2232, + 2233, + 2234, + 2235, + 2237, + 2238, + 2240, + 2241, + 2242, + 2243, + 2245, + 2246, + 2247, + 2249, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2259, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2268, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2278, + 2279, + 2280, + 2281, + 2282, + 2283, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n2 passed, 90 deselected in 2.52s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:594: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 24 / 24 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -0.13429338949088465 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 1.1776172821553483 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: 0.7540394717615756 (ACTUAL), -0.6451940968015629 (DESIRED)\nE [1, 1]: 1.9947886386434426 (ACTUAL), 0.0825255266666682 (DESIRED)\nE [2, 0]: -0.6451940968015629 (ACTUAL), -0.11873997633083841 (DESIRED)\nE Max absolute difference among violations: 3.0315093\nE Max relative difference among violations: 23.17177714\nE ACTUAL: array([[-0.134293, 1.177617],\nE [ 0.754039, 1.994789],\nE [-0.645194, 0.082526],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-0.645194, 0.082526],\nE [-0.11874 , -1.400206],..." + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:594: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 18 / 18 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: 0.21879687040848914 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: -1.1148814736874748 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: 0.7540394717615756 (ACTUAL), -1.0861640144823521 (DESIRED)\nE [1, 1]: 1.9947886386434426 (ACTUAL), -0.5693158913378338 (DESIRED)\nE [2, 0]: -1.0861640144823521 (ACTUAL), -1.215555026777933 (DESIRED)\nE Max absolute difference among violations: 3.10967011\nE Max relative difference among violations: 6.97417863\nE ACTUAL: array([[ 0.218797, -1.114881],\nE [ 0.754039, 1.994789],\nE [-1.086164, -0.569316],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-1.086164, -0.569316],\nE [-1.215555, 0.138822],..." + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[12] ________\ntests\\test_dimred_visualizer.py:594: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 24 / 24 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -0.13429338949088465 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 1.1776172821553483 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: 0.7540394717615756 (ACTUAL), -0.6451940968015629 (DESIRED)\nE [1, 1]: 1.9947886386434426 (ACTUAL), 0.0825255266666682 (DESIRED)\nE [2, 0]: -0.6451940968015629 (ACTUAL), -0.11873997633083841 (DESIRED)\nE Max absolute difference among violations: 3.0315093\nE Max relative difference among violations: 23.17177714\nE ACTUAL: array([[-0.134293, 1.177617],\nE [ 0.754039, 1.994789],\nE [-0.645194, 0.082526],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-0.645194, 0.082526],\nE [-0.11874 , -1.400206],...\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[9] _________\ntests\\test_dimred_visualizer.py:594: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 18 / 18 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: 0.21879687040848914 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: -1.1148814736874748 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: 0.7540394717615756 (ACTUAL), -1.0861640144823521 (DESIRED)\nE [1, 1]: 1.9947886386434426 (ACTUAL), -0.5693158913378338 (DESIRED)\nE [2, 0]: -1.0861640144823521 (ACTUAL), -1.215555026777933 (DESIRED)\nE Max absolute difference among violations: 3.10967011\nE Max relative difference among violations: 6.97417863\nE ACTUAL: array([[ 0.218797, -1.114881],\nE [ 0.754039, 1.994789],\nE [-1.086164, -0.569316],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-1.086164, -0.569316],\nE [-1.215555, 0.138822],...\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[12]\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[9]\n2 failed, 90 deselected in 3.12s\n", + "stderr": "" + } + }, + { + "name": "N05", + "selection": "interpolation_actual", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1278, + 1279 + ] + ], + "patch": "--- \n+++ \n@@ -1275,8 +1275,8 @@\n ax.plot(\n Z_interp[:, 0], Z_interp[:, 1], color=\"gray\", lw=1.5, zorder=2, alpha=0.6\n )\n- ax.scatter(*Z_interp[0], s=120, c=\"blue\", zorder=4, marker=\"*\", label=label_a)\n- ax.scatter(*Z_interp[-1], s=120, c=\"red\", zorder=4, marker=\"*\", label=label_b)\n+ ax.scatter(*Z_interp[0], s=120, c=\"blue\", zorder=4, marker=\"*\", label=(label_b))\n+ ax.scatter(*Z_interp[-1], s=120, c=\"red\", zorder=4, marker=\"*\", label=label_a)\n plt.colorbar(sc, ax=ax, label=\"\u03b1 (interpolation)\")\n ax.set_xlabel(\"Latent axe 1\")\n ax.set_ylabel(\"Latent axe 2\")\n", + "candidate_sha256": "13917cb73aeae55c591400ff03d4efccc14cb00db98ff3d27b4b51dcae35f4b0", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "interpolation_actual", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1266, + 1267, + 1268, + 1269, + 1271, + 1272, + 1274, + 1275, + 1277, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1285, + 1287, + 1288, + 1289, + 1291, + 1292, + 1293, + 1294, + 1295, + 1296, + 1298, + 1299, + 1300, + 1302, + 1303, + 1304, + 1305, + 1306, + 1308, + 1309, + 1312, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n1 passed, 91 deselected in 0.79s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "interpolation_actual", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:293: in test_interpolation_actual_path_feature_order_and_endpoints\n assert axes[0].collections[1].get_label() == \"A\"\nE AssertionError: assert 'B' == 'A'\nE \nE - A\nE + B" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_________ test_interpolation_actual_path_feature_order_and_endpoints __________\ntests\\test_dimred_visualizer.py:293: in test_interpolation_actual_path_feature_order_and_endpoints\n assert axes[0].collections[1].get_label() == \"A\"\nE AssertionError: assert 'B' == 'A'\nE \nE - A\nE + B\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_interpolation_actual_path_feature_order_and_endpoints\n1 failed, 91 deselected in 0.94s\n", + "stderr": "" + } + }, + { + "name": "N06", + "selection": "family_weights_bar", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 369 + ], + [ + 379 + ] + ], + "patch": "--- \n+++ \n@@ -374,7 +374,7 @@\n alpha=0.92,\n edgecolor=\"white\",\n linewidth=0.5,\n- label=\"PC1\",\n+ label=(\"PC2\"),\n )\n ax.bar(\n x + w / 2,\n@@ -384,7 +384,7 @@\n alpha=0.55,\n edgecolor=\"white\",\n linewidth=0.5,\n- label=\"PC2\",\n+ label=\"PC1\",\n hatch=\"//\",\n )\n # Lecture visuelle: opaque = PC1, hachur\u00e9/translucide = PC2.\n", + "candidate_sha256": "aab9151c32a9184032f1d5cb8092e7e951262c5c208f6af603017ab2a386df19", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "family_weights_bar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n1 passed, 91 deselected in 0.76s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "family_weights_bar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:176: in test_family_weights_bar_and_donut_angles\n assert_allclose([p.get_height() for p in series[\"PC1\"]], [80, 20, 0])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.0 (ACTUAL), 80 (DESIRED)\nE [1]: 30.0 (ACTUAL), 20 (DESIRED)\nE [2]: 70.0 (ACTUAL), 0 (DESIRED)\nE Max absolute difference among violations: 80.\nE Max relative difference among violations: 1.\nE ACTUAL: array([ 0., 30., 70.])\nE DESIRED: array([80, 20, 0])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n__________________ test_family_weights_bar_and_donut_angles ___________________\ntests\\test_dimred_visualizer.py:176: in test_family_weights_bar_and_donut_angles\n assert_allclose([p.get_height() for p in series[\"PC1\"]], [80, 20, 0])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.0 (ACTUAL), 80 (DESIRED)\nE [1]: 30.0 (ACTUAL), 20 (DESIRED)\nE [2]: 70.0 (ACTUAL), 0 (DESIRED)\nE Max absolute difference among violations: 80.\nE Max relative difference among violations: 1.\nE ACTUAL: array([ 0., 30., 70.])\nE DESIRED: array([80, 20, 0])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_family_weights_bar_and_donut_angles\n1 failed, 91 deselected in 0.83s\n", + "stderr": "" + } + }, + { + "name": "N03", + "selection": "real_export_readable", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024 + ] + ], + "patch": "--- \n+++ \n@@ -1015,7 +1015,13 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ import pickle\n+ clone=pickle.loads(pickle.dumps(fig))\n+ for axis in clone.axes:\n+ for collection in list(axis.collections):\n+ collection.remove()\n+ clone.savefig(path,bbox_inches=\"tight\",dpi=self.dpi)\n+ plt.close(clone)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n", + "candidate_sha256": "fc72e8f8514911cc968fd57dee9b6fb78846d55c43c6ac4763aa2c96a77b1421", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n2 passed, 90 deselected in 1.17s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:689: in test_real_export_readable_and_same_semantic_figure\n visualizer_contracts.assert_png_matches_figure(path, fig, c.viz.dpi)\ntests\\visualizer_review_contracts.py:90: in assert_png_matches_figure\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=1\nE Exported scientific artists differ from the returned figure\nE Mismatched elements: 162 / 312700 (0.0518%)\nE First 5 mismatches are at indices:\nE [28, 127, 0]: 255 (ACTUAL), 250 (DESIRED)\nE [28, 127, 1]: 255 (ACTUAL), 251 (DESIRED)\nE [28, 127, 2]: 255 (ACTUAL), 252 (DESIRED)\nE [28, 128, 0]: 255 (ACTUAL), 214 (DESIRED)\nE [28, 128, 1]: 255 (ACTUAL), 223 (DESIRED)\nE Max absolute difference among violations: 125\nE Max relative difference among violations: 0.96153846\nE ACTUAL: array([[[255, 255, 255, 255],\nE [255, 255, 255, 255],\nE [255, 255, 255, 255],...\nE DESIRED: array([[[255, 255, 255, 255],\nE [255, 255, 255, 255],\nE [255, 255, 255, 255],..." + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024, + 1025, + 1031, + 1098, + 1171, + 1172, + 1222, + 1262, + 1267, + 1268, + 1269, + 1321, + 1358, + 1363, + 1477, + 1482, + 1603, + 1606, + 1607, + 1608, + 1645, + 1650, + 1778, + 1783, + 1784, + 1958, + 1962, + 1963, + 2009, + 2013, + 2014, + 2061, + 2068, + 2168, + 2172, + 2220, + 2225, + 2226, + 2227, + 2294, + 2299, + 2396, + 2401, + 2533, + 2539, + 2678, + 2683, + 2684, + 2807, + 2811, + 2869, + 2875, + 2876, + 2989, + 2992 + ], + "stdout": "F. [100%]\n================================== FAILURES ===================================\n___________ test_real_export_readable_and_same_semantic_figure[png] ___________\ntests\\test_dimred_visualizer.py:689: in test_real_export_readable_and_same_semantic_figure\n visualizer_contracts.assert_png_matches_figure(path, fig, c.viz.dpi)\ntests\\visualizer_review_contracts.py:90: in assert_png_matches_figure\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=1\nE Exported scientific artists differ from the returned figure\nE Mismatched elements: 162 / 312700 (0.0518%)\nE First 5 mismatches are at indices:\nE [28, 127, 0]: 255 (ACTUAL), 250 (DESIRED)\nE [28, 127, 1]: 255 (ACTUAL), 251 (DESIRED)\nE [28, 127, 2]: 255 (ACTUAL), 252 (DESIRED)\nE [28, 128, 0]: 255 (ACTUAL), 214 (DESIRED)\nE [28, 128, 1]: 255 (ACTUAL), 223 (DESIRED)\nE Max absolute difference among violations: 125\nE Max relative difference among violations: 0.96153846\nE ACTUAL: array([[[255, 255, 255, 255],\nE [255, 255, 255, 255],\nE [255, 255, 255, 255],...\nE DESIRED: array([[[255, 255, 255, 255],\nE [255, 255, 255, 255],\nE [255, 255, 255, 255],...\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_export_readable_and_same_semantic_figure[png]\n1 failed, 1 passed, 90 deselected in 1.34s\n", + "stderr": "" + } + }, + { + "name": "A_TRUST", + "selection": "real_sklearn_trustworthiness", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2233 + ] + ], + "patch": "--- \n+++ \n@@ -2230,7 +2230,7 @@\n rng = np.random.default_rng(42)\n n = min(n_subsample, len(X_ref))\n # Sous-\u00e9chantillonnage pour ma\u00eetriser le co\u00fbt de calcul T(k).\n- idx = rng.choice(len(X_ref), size=n, replace=False)\n+ idx = np.sort(rng.permutation(len(X_ref))[:n])\n X_sub = X_ref[idx]\n Zu_sub = Z_umap[idx]\n Zt_sub = Z_tsne[idx]\n", + "candidate_sha256": "fcc67a8362f6f40330e5d109e8e0851d1fe3ef3870d3986f40d225d1bf91f9c2", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n2 passed, 90 deselected in 2.70s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n2 passed, 90 deselected in 2.63s\n", + "stderr": "" + } + }, + { + "name": "AD14", + "selection": "trustworthiness_axis_contains", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2279, + 2280 + ] + ], + "patch": "--- \n+++ \n@@ -2276,7 +2276,8 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0.75,1.01)\n+ ax.text(.1,.1,f\"T(k) < 0.75 hors champ : min = {min(trust_t):.3f}\",transform=ax.transAxes)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n", + "candidate_sha256": "b226e92e6afab749ae6ab91b70733b47ccaf8995f634945d03935428180aa4ba", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:329: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:329: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\n1 failed, 91 deselected in 2.70s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2285, + 2289, + 2294, + 2391, + 2396, + 2528, + 2534, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n1 passed, 91 deselected in 2.41s\n", + "stderr": "" + } + }, + { + "name": "A_EXPORT", + "selection": "default_output_directory or real_export_readable", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1087 + ], + [ + 1249 + ] + ], + "patch": "--- \n+++ \n@@ -1084,9 +1084,7 @@\n \"Autoencodeur \u2014 Historique d'entra\u00eenement (LAMOST DR5)\", fontsize=13, y=1.02\n )\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_training_history\")\n return fig, axes\n \n def plot_ae_embedding(self, Z, meta, y, save_path=None):\n@@ -1248,9 +1246,7 @@\n ax.legend(fontsize=9)\n ax.grid(True, alpha=0.3)\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_ae_vs_pca\")\n return fig, ax\n \n def plot_latent_interpolation(\n", + "candidate_sha256": "03cd6fc36c4863b2d546a7b7a0986741434046b13d54c198a9eca3cf45e23b75", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_output_directory or real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1529/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1529/test_default_output_directory_1').glob" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1165, + 1166, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "..FF [100%]\n================================== FAILURES ===================================\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1529/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1529/test_default_output_directory_1').glob\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\n2 failed, 2 passed, 88 deselected in 1.85s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_output_directory or real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1010, + 1012, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1088, + 1090, + 1163, + 1164, + 1214, + 1216, + 1218, + 1219, + 1221, + 1222, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1231, + 1233, + 1234, + 1236, + 1238, + 1239, + 1240, + 1241, + 1243, + 1244, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1252, + 1257, + 1258, + 1259, + 1311, + 1348, + 1353, + 1467, + 1472, + 1593, + 1596, + 1597, + 1598, + 1635, + 1640, + 1768, + 1773, + 1774, + 1948, + 1952, + 1953, + 1999, + 2003, + 2004, + 2051, + 2058, + 2158, + 2162, + 2210, + 2215, + 2216, + 2217, + 2284, + 2289, + 2386, + 2391, + 2523, + 2529, + 2668, + 2673, + 2674, + 2797, + 2801, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n4 passed, 88 deselected in 2.61s\n", + "stderr": "" + } + }, + { + "name": "A_METHODS", + "selection": "synthesis_preserves", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2887 + ] + ], + "patch": "--- \n+++ \n@@ -2884,7 +2884,7 @@\n if Z_umap is not None:\n # UMAP est optionnel selon le notebook ex\u00e9cut\u00e9.\n METHODS.append((\"UMAP\", Z_umap, \"UMAP 1\", \"UMAP 2\"))\n- METHODS.append((\"Autoencodeur\", Z_ae, \"Latent 1\", \"Latent 2\"))\n+ METHODS.append((\"AE\", Z_ae, \"Latent 1\", \"Latent 2\"))\n \n PARAMS = [\n (\"Classe spectrale\", None, None),\n", + "candidate_sha256": "c262ecf582497b62b25e0ba2a89eb1c64108a95e763215442d6b610a19acc030", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n2 passed, 90 deselected in 1.01s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n2 passed, 90 deselected in 1.12s\n", + "stderr": "" + } + }, + { + "name": "A_HIST", + "selection": "linear_histogram_truncation", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2833 + ] + ], + "patch": "--- \n+++ \n@@ -2830,7 +2830,7 @@\n if np.any(y == \"STAR\")\n else vals.max()\n )\n- bins = np.linspace(0, star_p99 * 1.5, 60)\n+ bins = np.linspace(0, float(np.max(mse_per_sample)), 60)\n ax.hist(\n vals,\n bins=bins,\n", + "candidate_sha256": "c4089757fef756a2e5f871e344afcfaba96057c66a8c6516a744d75ae4ed022a", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:236: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:236: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n1 failed, 91 deselected in 1.43s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n1 passed, 91 deselected in 1.29s\n", + "stderr": "" + } + }, + { + "name": "AD_HIST", + "selection": "linear_histogram_truncation", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2834, + 2835, + 2836 + ] + ], + "patch": "--- \n+++ \n@@ -2831,6 +2831,9 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls}: excluded {missing} of {len(vals)} outside support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n", + "candidate_sha256": "dd837b5041209b36dbb2ea5dbd14f3fa8c002cde560a5fe1472b6db67f1b5578", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:236: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:236: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n1 failed, 91 deselected in 1.40s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2846, + 2847, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2858, + 2859, + 2860, + 2862, + 2863, + 2864, + 2866, + 2872, + 2873, + 2986, + 2989 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n1 passed, 91 deselected in 1.26s\n", + "stderr": "" + } + }, + { + "name": "AD_LOG", + "selection": "log_histogram_keeps", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2834, + 2835, + 2836 + ] + ], + "patch": "--- \n+++ \n@@ -2831,6 +2831,9 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls}: excluded {missing} of {len(vals)} outside support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n", + "candidate_sha256": "dd837b5041209b36dbb2ea5dbd14f3fa8c002cde560a5fe1472b6db67f1b5578", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\n1 failed, 91 deselected in 1.30s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2846, + 2847, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2858, + 2859, + 2860, + 2862, + 2863, + 2864, + 2866, + 2872, + 2873, + 2986, + 2989 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n1 passed, 91 deselected in 1.18s\n", + "stderr": "" + } + }, + { + "name": "K10", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2424 + ], + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ] + ], + "patch": "--- \n+++ \n@@ -2421,33 +2421,24 @@\n # Sous-\u00e9chantillon pour stabiliser le co\u00fbt de la KDE.\n idx = rng.choice(len(Z_stars), N_KDE, replace=False)\n logger.info(\"Calcul KDE sur %d \u00e9toiles...\", N_KDE)\n- kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n+ kde = gaussian_kde(Z_stars[idx][Z_stars[idx][:,0]<3].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "8ab9d01ffd73e4273dcf25acede88db6e3794d8fc8d5d963519cd0a77c449768", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n5 passed, 87 deselected in 23.85s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.1\nE Fitted STAR sample excludes or overrepresents a stellar mode\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3\nE Max relative difference among violations: 1.\nE ACTUAL: array(0.)\nE DESIRED: array(0.3)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.1\nE Fitted STAR sample excludes or overrepresents a stellar mode\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3\nE Max relative difference among violations: 1.\nE ACTUAL: array(0.)\nE DESIRED: array(0.3)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.1\nE Fitted STAR sample excludes or overrepresents a stellar mode\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3\nE Max relative difference among violations: 1.\nE ACTUAL: array(0.)\nE DESIRED: array(0.3)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "..FFF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.1\nE Fitted STAR sample excludes or overrepresents a stellar mode\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3\nE Max relative difference among violations: 1.\nE ACTUAL: array(0.)\nE DESIRED: array(0.3)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.1\nE Fitted STAR sample excludes or overrepresents a stellar mode\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3\nE Max relative difference among violations: 1.\nE ACTUAL: array(0.)\nE DESIRED: array(0.3)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.1\nE Fitted STAR sample excludes or overrepresents a stellar mode\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3\nE Max relative difference among violations: 1.\nE ACTUAL: array(0.)\nE DESIRED: array(0.3)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n3 failed, 2 passed, 87 deselected in 9.10s\n", + "stderr": "" + } + }, + { + "name": "K11", + "selection": "kde_labeled_regions", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2424 + ], + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ] + ], + "patch": "--- \n+++ \n@@ -2421,33 +2421,24 @@\n # Sous-\u00e9chantillon pour stabiliser le co\u00fbt de la KDE.\n idx = rng.choice(len(Z_stars), N_KDE, replace=False)\n logger.info(\"Calcul KDE sur %d \u00e9toiles...\", N_KDE)\n- kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n+ kde = gaussian_kde(Z_stars[idx[:max(3,len(idx)//2)]].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "15a1ba5506bf85d608c2a94bf4851e67480ea9d02c0eb08d946314914e699807", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 87 deselected in 15.59s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n5 passed, 87 deselected in 14.65s\n", + "stderr": "" + } + }, + { + "name": "FD05", + "selection": "cluster_colorbar", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1420 + ], + [ + 1564 + ] + ], + "patch": "--- \n+++ \n@@ -1418,7 +1418,7 @@\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n plt.colorbar(\n- sm, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n+ sm, ax=ax, fraction=0.035, pad=0.02, label=\"Groupe HDBSCAN\"\n ).ax.tick_params(labelsize=8)\n ax.text(\n 0.02,\n@@ -1562,7 +1562,7 @@\n )\n sm2.set_array([])\n plt.colorbar(\n- sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n+ sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Groupe HDBSCAN\"\n ).ax.tick_params(labelsize=8)\n \n ax2 = axes[1]\n", + "candidate_sha256": "d6a22497392a50245afff60a54ddb64d4005e114f758f93034a1139964fa13c6", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1359, + 1360, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1371, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1386, + 1387, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1414, + 1415, + 1417, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1426, + 1427, + 1428, + 1429, + 1430, + 1432, + 1433, + 1434, + 1435, + 1437, + 1440, + 1441, + 1442, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1455, + 1456, + 1457, + 1458, + 1460, + 1461, + 1462, + 1463, + 1464, + 1466, + 1467, + 1468, + 1470, + 1475, + 1478, + 1481, + 1482, + 1483, + 1484, + 1485, + 1487, + 1488, + 1493, + 1494, + 1495, + 1498, + 1499, + 1501, + 1502, + 1504, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1516, + 1517, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1529, + 1530, + 1531, + 1532, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1558, + 1559, + 1560, + 1562, + 1563, + 1564, + 1565, + 1567, + 1568, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1582, + 1583, + 1584, + 1585, + 1587, + 1588, + 1589, + 1590, + 1592, + 1593, + 1594, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n2 passed, 90 deselected in 1.19s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n2 failed, 90 deselected in 1.38s\n", + "stderr": "" + } + }, + { + "name": "FD05_H", + "selection": "cluster_colorbar", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1420 + ], + [ + 1564 + ] + ], + "patch": "--- \n+++ \n@@ -1418,7 +1418,7 @@\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n plt.colorbar(\n- sm, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n+ sm, ax=ax, fraction=0.035, pad=0.02, label=\"Groupe HDBSCAN\", orientation=\"horizontal\"\n ).ax.tick_params(labelsize=8)\n ax.text(\n 0.02,\n@@ -1562,7 +1562,7 @@\n )\n sm2.set_array([])\n plt.colorbar(\n- sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n+ sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Groupe HDBSCAN\", orientation=\"horizontal\"\n ).ax.tick_params(labelsize=8)\n \n ax2 = axes[1]\n", + "candidate_sha256": "4138261e0a35f2c1d648592aa07055eea7ccbde18759ff55ee11c374b028b92e", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1359, + 1360, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1371, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1386, + 1387, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1414, + 1415, + 1417, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1426, + 1427, + 1428, + 1429, + 1430, + 1432, + 1433, + 1434, + 1435, + 1437, + 1440, + 1441, + 1442, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1455, + 1456, + 1457, + 1458, + 1460, + 1461, + 1462, + 1463, + 1464, + 1466, + 1467, + 1468, + 1470, + 1475, + 1478, + 1481, + 1482, + 1483, + 1484, + 1485, + 1487, + 1488, + 1493, + 1494, + 1495, + 1498, + 1499, + 1501, + 1502, + 1504, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1516, + 1517, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1529, + 1530, + 1531, + 1532, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1558, + 1559, + 1560, + 1562, + 1563, + 1564, + 1565, + 1567, + 1568, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1582, + 1583, + 1584, + 1585, + 1587, + 1588, + 1589, + 1590, + 1592, + 1593, + 1594, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n2 passed, 90 deselected in 1.20s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n2 failed, 90 deselected in 1.38s\n", + "stderr": "" + } + }, + { + "name": "AC05_H", + "selection": "cluster_colorbar", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1415 + ], + [ + 1420 + ], + [ + 1560 + ], + [ + 1564 + ] + ], + "patch": "--- \n+++ \n@@ -1413,12 +1413,12 @@\n ),\n )\n sm = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n plt.colorbar(\n- sm, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n+ sm, ax=ax, fraction=0.035, pad=0.02, label=\"Groupe HDBSCAN\", orientation=\"horizontal\"\n ).ax.tick_params(labelsize=8)\n ax.text(\n 0.02,\n@@ -1558,11 +1558,11 @@\n )\n ax.grid(True, alpha=0.2)\n sm2 = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm2.set_array([])\n plt.colorbar(\n- sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n+ sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Groupe HDBSCAN\", orientation=\"horizontal\"\n ).ax.tick_params(labelsize=8)\n \n ax2 = axes[1]\n", + "candidate_sha256": "8a4e7935b811a1274c0ab9191ab3686e67d1abe234347469c7ad629f4f798f03", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n2 failed, 90 deselected in 1.37s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n2 passed, 90 deselected in 1.20s\n", + "stderr": "" + } + }, + { + "name": "AD05_ANN", + "selection": "cluster_colorbar", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1420 + ], + [ + 1530 + ], + [ + 1562 + ] + ], + "patch": "--- \n+++ \n@@ -1417,9 +1417,7 @@\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n- plt.colorbar(\n- sm, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n- ).ax.tick_params(labelsize=8)\n+ pass # Categorical annotations remain authoritative.\n ax.text(\n 0.02,\n 0.98,\n@@ -1529,7 +1527,7 @@\n )\n for cid in top8:\n m = (cl == cid) & valid_hr\n- if m.sum() < 20:\n+ if m.sum() < 1:\n continue\n # \u00c9tiquette des clusters dominants au barycentre m\u00e9dian.\n mt, mg = np.median(teff[m]), np.median(logg[m])\n@@ -1561,9 +1559,7 @@\n cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n )\n sm2.set_array([])\n- plt.colorbar(\n- sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n- ).ax.tick_params(labelsize=8)\n+ pass # Categorical annotations remain authoritative.\n \n ax2 = axes[1]\n valid_teff = np.isfinite(teff)\n", + "candidate_sha256": "dd5e34c296771518e71ea5ffaeee22d2b266314f0e8e951af13d788c0529361c", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n2 failed, 90 deselected in 1.37s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1425, + 1426, + 1427, + 1428, + 1429, + 1431, + 1432, + 1433, + 1434, + 1436, + 1439, + 1440, + 1441, + 1443, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1454, + 1455, + 1456, + 1457, + 1459, + 1460, + 1461, + 1462, + 1463, + 1465, + 1466, + 1467, + 1469, + 1474, + 1477, + 1480, + 1481, + 1482, + 1483, + 1484, + 1486, + 1487, + 1492, + 1493, + 1494, + 1497, + 1498, + 1500, + 1501, + 1503, + 1505, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1515, + 1516, + 1518, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1528, + 1529, + 1530, + 1533, + 1534, + 1535, + 1536, + 1537, + 1538, + 1539, + 1540, + 1541, + 1542, + 1543, + 1544, + 1546, + 1548, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1557, + 1558, + 1559, + 1561, + 1562, + 1564, + 1565, + 1567, + 1568, + 1569, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1579, + 1580, + 1581, + 1582, + 1584, + 1585, + 1586, + 1587, + 1589, + 1590, + 1591, + 1593, + 1596, + 1597, + 1598, + 1635, + 1640, + 1768, + 1773, + 1774, + 1948, + 1952, + 1953, + 1999, + 2003, + 2004, + 2051, + 2058, + 2158, + 2162, + 2210, + 2215, + 2216, + 2217, + 2284, + 2289, + 2386, + 2391, + 2523, + 2529, + 2668, + 2673, + 2674, + 2797, + 2801, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n2 passed, 90 deselected in 1.16s\n", + "stderr": "" + } + }, + { + "name": "FD03_K", + "selection": "hr_population_title", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 3213 + ] + ], + "patch": "--- \n+++ \n@@ -3212,7 +3212,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 \u2248 43k \u00e9toiles\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "candidate_sha256": "8fa2822212ead8f9d2aa3c7510bf5b7d62d7e3c49a7fc304f69c055eda286121", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982, + 2995, + 2996, + 2997, + 2999, + 3000, + 3004, + 3005, + 3006, + 3011, + 3012, + 3013, + 3014, + 3016, + 3017, + 3026, + 3027, + 3028, + 3031, + 3034, + 3035, + 3037, + 3038, + 3039, + 3040, + 3041, + 3042, + 3043, + 3044, + 3046, + 3047, + 3048, + 3049, + 3050, + 3052, + 3053, + 3054, + 3055, + 3056, + 3057, + 3058, + 3060, + 3064, + 3065, + 3066, + 3067, + 3068, + 3069, + 3070, + 3071, + 3073, + 3074, + 3075, + 3076, + 3077, + 3078, + 3082, + 3083, + 3084, + 3085, + 3086, + 3087, + 3088, + 3089, + 3091, + 3092, + 3093, + 3094, + 3095, + 3096, + 3097, + 3101, + 3102, + 3103, + 3104, + 3105, + 3106, + 3107, + 3108, + 3110, + 3111, + 3112, + 3113, + 3114, + 3115, + 3116, + 3122, + 3125, + 3138, + 3139, + 3140, + 3141, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3151, + 3152, + 3153, + 3156, + 3157, + 3158, + 3159, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3167, + 3168, + 3169, + 3170, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3184, + 3185, + 3186, + 3187, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3199, + 3200, + 3201, + 3202, + 3204, + 3205, + 3207, + 3208, + 3209, + 3210, + 3212, + 3213, + 3215, + 3216, + 3218, + 3219 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n2 passed, 90 deselected in 1.11s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 \u2248 43k \u00e9toiles\nE assert (not [43000.0] or False)\nE + where False = all(. at 0x000001939A36BBC0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 \u2248 43k \u00e9toiles\nE assert (not [43000.0] or False)\nE + where False = all(. at 0x00000193DC5CB760>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 \u2248 43k \u00e9toiles\nE assert (not [43000.0] or False)\nE + where False = all(. at 0x000001939A36BBC0>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 \u2248 43k \u00e9toiles\nE assert (not [43000.0] or False)\nE + where False = all(. at 0x00000193DC5CB760>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\n2 failed, 90 deselected in 1.26s\n", + "stderr": "" + } + }, + { + "name": "FVAR_COMPONENT", + "selection": "truncated_variance_annotation", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 185 + ] + ], + "patch": "--- \n+++ \n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"{n_thresh} composantes \u2192 {cumvar[idx]*100:.1f} %\".replace(\".\",\",\"),\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n", + "candidate_sha256": "1e19e91a846687321cc9a69bc5b6b94eb025b970daa6b3bd993c81c662bd8d88", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "truncated_variance_annotation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n1 passed, 91 deselected in 0.73s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "truncated_variance_annotation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\n1 failed, 91 deselected in 0.89s\n", + "stderr": "" + } + }, + { + "name": "A_VARIANCE", + "selection": "truncated_variance_annotation or real_pca_variance", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 185 + ] + ], + "patch": "--- \n+++ \n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"{n_thresh} composantes \u2192 {pca_analyzer.explained_variance_ratio[:n_thresh].sum()*100:.1f} %\".replace(\".\",\",\"),\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n", + "candidate_sha256": "23784ba7a75d05fe3fa9f4b0c139038c8f7fc88c587ca496697dab372656cae8", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "truncated_variance_annotation or real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".F [100%]\n================================== FAILURES ===================================\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\n1 failed, 1 passed, 90 deselected in 3.14s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "truncated_variance_annotation or real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n2 passed, 90 deselected in 2.65s\n", + "stderr": "" + } + }, + { + "name": "AD_COMMA", + "selection": "linear_histogram_truncation or log_histogram_keeps", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2834, + 2835, + 2836 + ] + ], + "patch": "--- \n+++ \n@@ -2831,6 +2831,9 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls} : {missing} exclues sur {len(vals)}, observations tronqu\u00e9es hors support {bins[0]:.6f} \u00e0 {bins[-1]:.6f}\".replace(\".\",\",\"),transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n", + "candidate_sha256": "bd572e62ce168ca96047e135efc376b3f7d1169935ff4b293814ec9070fcd46f", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation or log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:236: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:236: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n2 failed, 90 deselected in 1.80s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation or log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2846, + 2847, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2858, + 2859, + 2860, + 2862, + 2863, + 2864, + 2866, + 2872, + 2873, + 2986, + 2989 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n2 passed, 90 deselected in 1.59s\n", + "stderr": "" + } + }, + { + "name": "FD_COMMA_BOUND", + "selection": "linear_histogram_truncation or log_histogram_keeps", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2834, + 2835, + 2836 + ] + ], + "patch": "--- \n+++ \n@@ -2831,6 +2831,9 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls} : {missing} exclues sur {len(vals)}, observations tronqu\u00e9es hors support {bins[0]:.6f} \u00e0 {bins[-1]+.05:.6f}\".replace(\".\",\",\"),transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n", + "candidate_sha256": "9716df0cc0f83199f138b855c186cd07d9692d6e5e4490fa6774cf0c83739175", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation or log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n2 passed, 90 deselected in 1.73s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation or log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:236: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2846, + 2847, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2858, + 2859, + 2860, + 2862, + 2863, + 2864, + 2866, + 2872, + 2873, + 2986, + 2989 + ], + "stdout": ".F [100%]\n================================== FAILURES ===================================\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:236: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n1 failed, 1 passed, 90 deselected in 1.78s\n", + "stderr": "" + } + }, + { + "name": "A_TOTAL", + "selection": "linear_histogram_truncation", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2834, + 2835, + 2836, + 2837 + ], + [ + 2838 + ] + ], + "patch": "--- \n+++ \n@@ -2831,12 +2831,16 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ hist_kwargs = dict(density=True)\n+ if xscale == \"linear\":\n+ hist_kwargs = dict(density=False,weights=np.full(len(vals),1/(len(vals)*np.diff(bins)[0])))\n+ ax.text(.03,.12,f\"{cls}: density normalized by total {len(vals)}, support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n alpha=0.55,\n color=color,\n- density=True,\n+ **hist_kwargs,\n label=f\"{cls} m\u00e9diane={med:.3f}\",\n )\n # Marqueur central robuste pour chaque classe.\n", + "candidate_sha256": "6aca5f7f9faff6bf5cc64cb5d7d19b7719f3d85a08b735c46af0ad427ca53338", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:236: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:236: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n1 failed, 91 deselected in 1.41s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2847, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2854, + 2856, + 2857, + 2858, + 2859, + 2860, + 2861, + 2863, + 2864, + 2865, + 2867, + 2873, + 2874, + 2987, + 2990 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n1 passed, 91 deselected in 1.27s\n", + "stderr": "" + } + }, + { + "name": "F_TOTAL_LIE", + "selection": "linear_histogram_truncation", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2834, + 2835, + 2836, + 2837 + ], + [ + 2838 + ] + ], + "patch": "--- \n+++ \n@@ -2831,12 +2831,16 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ hist_kwargs = dict(density=True)\n+ if xscale == \"linear\":\n+ hist_kwargs = dict(density=True,weights=np.full(len(vals),1/(len(vals)*np.diff(bins)[0])))\n+ ax.text(.03,.12,f\"{cls}: density normalized by total {len(vals)}, support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n alpha=0.55,\n color=color,\n- density=True,\n+ **hist_kwargs,\n label=f\"{cls} m\u00e9diane={med:.3f}\",\n )\n # Marqueur central robuste pour chaque classe.\n", + "candidate_sha256": "a5c70cd0399d925e8b24162a115e05a8aab82e7d4270d899b7fb5e1c7245f3ca", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n1 passed, 91 deselected in 1.27s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:215: in assert_histogram_representation\n missing, edges = assert_histogram_population(call, expected, convention)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests\\visualizer_review_contracts.py:187: in assert_histogram_population\n assert_allclose(plotted, reference, atol=1e-10, rtol=1e-10)\nE AssertionError: \nE Not equal to tolerance rtol=1e-10, atol=1e-10\nE \nE Mismatched elements: 3 / 59 (5.08%)\nE Mismatch at indices:\nE [15]: 132.30182755914328 (ACTUAL), 7.938109653548597 (DESIRED)\nE [35]: 132.30182755914402 (ACTUAL), 7.938109653548641 (DESIRED)\nE [39]: 132.30182755914328 (ACTUAL), 7.938109653548597 (DESIRED)\nE Max absolute difference among violations: 124.36371791\nE Max relative difference among violations: 15.66666667\nE ACTUAL: array([ 0. , 0. , 0. , 0. , 0. ,\nE 0. , 0. , 0. , 0. , 0. ,\nE 0. , 0. , 0. , 0. , 0. ,...\nE DESIRED: array([0. , 0. , 0. , 0. , 0. , 0. , 0. ,\nE 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\nE 0. , 7.93811, 0. , 0. , 0. , 0. , 0. ,..." + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2847, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2854, + 2856, + 2857, + 2858, + 2859, + 2860, + 2861, + 2863, + 2864, + 2865, + 2867, + 2873, + 2874, + 2987, + 2990 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:215: in assert_histogram_representation\n missing, edges = assert_histogram_population(call, expected, convention)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests\\visualizer_review_contracts.py:187: in assert_histogram_population\n assert_allclose(plotted, reference, atol=1e-10, rtol=1e-10)\nE AssertionError: \nE Not equal to tolerance rtol=1e-10, atol=1e-10\nE \nE Mismatched elements: 3 / 59 (5.08%)\nE Mismatch at indices:\nE [15]: 132.30182755914328 (ACTUAL), 7.938109653548597 (DESIRED)\nE [35]: 132.30182755914402 (ACTUAL), 7.938109653548641 (DESIRED)\nE [39]: 132.30182755914328 (ACTUAL), 7.938109653548597 (DESIRED)\nE Max absolute difference among violations: 124.36371791\nE Max relative difference among violations: 15.66666667\nE ACTUAL: array([ 0. , 0. , 0. , 0. , 0. ,\nE 0. , 0. , 0. , 0. , 0. ,\nE 0. , 0. , 0. , 0. , 0. ,...\nE DESIRED: array([0. , 0. , 0. , 0. , 0. , 0. , 0. ,\nE 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\nE 0. , 7.93811, 0. , 0. , 0. , 0. , 0. ,...\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n1 failed, 91 deselected in 1.43s\n", + "stderr": "" + } + }, + { + "name": "F_CONDITIONAL_LIE", + "selection": "linear_histogram_truncation", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2834, + 2835, + 2836, + 2837 + ], + [ + 2838 + ] + ], + "patch": "--- \n+++ \n@@ -2831,12 +2831,16 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ hist_kwargs = dict(density=True)\n+ if xscale == \"linear\":\n+ hist_kwargs = dict(density=False,weights=np.full(len(vals),1/(len(vals)*np.diff(bins)[0])))\n+ ax.text(.03,.12,f\"{cls}: conditional density\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n alpha=0.55,\n color=color,\n- density=True,\n+ **hist_kwargs,\n label=f\"{cls} m\u00e9diane={med:.3f}\",\n )\n # Marqueur central robuste pour chaque classe.\n", + "candidate_sha256": "4d8d1843608d9525c6e0f0f388963b87de83b0cb321a8f31fc6bdb4ada9d35aa", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n1 passed, 91 deselected in 1.27s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:215: in assert_histogram_representation\n missing, edges = assert_histogram_population(call, expected, convention)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests\\visualizer_review_contracts.py:187: in assert_histogram_population\n assert_allclose(plotted, reference, atol=1e-10, rtol=1e-10)\nE AssertionError: \nE Not equal to tolerance rtol=1e-10, atol=1e-10\nE \nE Mismatched elements: 3 / 59 (5.08%)\nE Mismatch at indices:\nE [15]: 7.938109653548604 (ACTUAL), 1.0 (DESIRED)\nE [35]: 7.938109653548604 (ACTUAL), 1.0 (DESIRED)\nE [39]: 7.938109653548604 (ACTUAL), 1.0 (DESIRED)\nE Max absolute difference among violations: 6.93810965\nE Max relative difference among violations: 6.93810965\nE ACTUAL: array([0. , 0. , 0. , 0. , 0. , 0. , 0. ,\nE 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\nE 0. , 7.93811, 0. , 0. , 0. , 0. , 0. ,...\nE DESIRED: array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,\nE 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\nE 0., 1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\nE 0., 0., 0., 0., 0., 0., 0., 0.])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2847, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2854, + 2856, + 2857, + 2858, + 2859, + 2860, + 2861, + 2863, + 2864, + 2865, + 2867, + 2873, + 2874, + 2987, + 2990 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:215: in assert_histogram_representation\n missing, edges = assert_histogram_population(call, expected, convention)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests\\visualizer_review_contracts.py:187: in assert_histogram_population\n assert_allclose(plotted, reference, atol=1e-10, rtol=1e-10)\nE AssertionError: \nE Not equal to tolerance rtol=1e-10, atol=1e-10\nE \nE Mismatched elements: 3 / 59 (5.08%)\nE Mismatch at indices:\nE [15]: 7.938109653548604 (ACTUAL), 1.0 (DESIRED)\nE [35]: 7.938109653548604 (ACTUAL), 1.0 (DESIRED)\nE [39]: 7.938109653548604 (ACTUAL), 1.0 (DESIRED)\nE Max absolute difference among violations: 6.93810965\nE Max relative difference among violations: 6.93810965\nE ACTUAL: array([0. , 0. , 0. , 0. , 0. , 0. , 0. ,\nE 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\nE 0. , 7.93811, 0. , 0. , 0. , 0. , 0. ,...\nE DESIRED: array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,\nE 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\nE 0., 1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\nE 0., 0., 0., 0., 0., 0., 0., 0.])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n1 failed, 91 deselected in 1.41s\n", + "stderr": "" + } + }, + { + "name": "JOINT_TOTAL", + "selection": "", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 154 + ], + [ + 185 + ], + [ + 288 + ], + [ + 869 + ], + [ + 1018 + ], + [ + 1087 + ], + [ + 1110 + ], + [ + 1178, + 1179 + ], + [ + 1252 + ], + [ + 1319 + ], + [ + 1414 + ], + [ + 1559 + ], + [ + 2019 + ], + [ + 2040 + ], + [ + 2068 + ], + [ + 2278 + ], + [ + 2320 + ], + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2527, + 2528 + ], + [ + 2816 + ], + [ + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833 + ], + [ + 2834 + ], + [ + 3039 + ], + [ + 3213 + ] + ], + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, 100 * ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"{n_thresh} PCs\\n\u2192 {pca_analyzer.explained_variance_ratio[:n_thresh].sum()*100:.1f}%\",\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n@@ -285,7 +285,7 @@\n df = df.sort_values(\"loading\")\n \n # Couleur encodant le signe physique de la contribution.\n- colors = [\"#DD8452\" if v < 0 else \"#4C72B0\" for v in df[\"loading\"]]\n+ colors = [\"#CC5500\" if v < 0 else \"#0055CC\" for v in df[\"loading\"]]\n fig, ax = plt.subplots(figsize=(8, max(4, n_top * 0.35)), dpi=self.dpi)\n \n ax.barh(\n@@ -869,7 +869,7 @@\n ax.text(\n lam,\n ymax * 0.88,\n- nom,\n+ nom.replace(chr(92)*2, chr(92)),\n rotation=90,\n fontsize=6,\n color=\"crimson\",\n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ fig.canvas.print_figure(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n@@ -1084,9 +1084,7 @@\n \"Autoencodeur \u2014 Historique d'entra\u00eenement (LAMOST DR5)\", fontsize=13, y=1.02\n )\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_training_history\")\n return fig, axes\n \n def plot_ae_embedding(self, Z, meta, y, save_path=None):\n@@ -1109,6 +1107,7 @@\n \n PALETTE = {\"STAR\": \"#4C72B0\", \"GALAXY\": \"#DD8452\", \"QSO\": \"#55A868\"}\n MARKERS = {\"STAR\": \"o\", \"GALAXY\": \"s\", \"QSO\": \"^\"}\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -1176,6 +1175,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in axes[len(idx):]:\n+ unused.set_visible(False)\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n@@ -1248,9 +1249,7 @@\n ax.legend(fontsize=9)\n ax.grid(True, alpha=0.3)\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_ae_vs_pca\")\n return fig, ax\n \n def plot_latent_interpolation(\n@@ -1317,7 +1316,7 @@\n classes = np.unique(y)\n palette = [\"#4C72B0\", \"#DD8452\", \"#55A868\", \"#C44E52\"]\n fig, ax = plt.subplots(figsize=(9, 5), dpi=self.dpi)\n- for cls, color in zip(classes, palette):\n+ for cls, color in zip(classes, palette*((len(classes)+len(palette)-1)//len(palette))):\n mask = y == cls\n vals = mse_per_sample[mask]\n # Histogrammes normalis\u00e9s pour comparer les formes de distribution.\n@@ -1413,7 +1412,7 @@\n ),\n )\n sm = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n@@ -1558,7 +1557,7 @@\n )\n ax.grid(True, alpha=0.2)\n sm2 = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm2.set_array([])\n plt.colorbar(\n@@ -2017,7 +2016,7 @@\n ncols = 4\n nrows = (n_show + ncols - 1) // ncols\n fig, axes = plt.subplots(nrows, ncols, figsize=(5 * ncols, 4 * nrows), dpi=120)\n- axes_flat = axes.flatten() if n_show > 1 else [axes]\n+ axes_flat = np.asarray(axes).ravel()\n \n for ax_i, cid in zip(axes_flat, top_cids):\n profile = cluster_means.loc[cid]\n@@ -2038,7 +2037,7 @@\n ax_i.set_xlabel(\"Score moyen (\u03c3)\", fontsize=8)\n ax_i.grid(axis=\"x\", alpha=0.3)\n ax_i.set_xlim(-3, 3)\n- for ax_i in axes_flat[n_show:]:\n+ for ax_i in axes_flat[len(top_cids):]:\n ax_i.axis(\"off\")\n fig.suptitle(\n \"Top-5 features caract\u00e9ristiques par cluster HDBSCAN\\n\"\n@@ -2066,7 +2065,7 @@\n \n # V\u00e9rifie si une vraie probabilit\u00e9 est disponible.\n classes_pred = sorted(set(y_pred))\n- has_proba = confidence is not None and not np.all(confidence == 1.0)\n+ has_proba = confidence is not None\n fig, axes = plt.subplots(1, 3, figsize=(22, 8), dpi=self.dpi)\n \n ax = axes[0]\n@@ -2276,7 +2275,7 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0, 1.01)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n@@ -2318,6 +2317,7 @@\n ]\n \n fig, axes = plt.subplots(1, 1 + len(available), figsize=(22, 5), dpi=self.dpi)\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2533,6 +2524,8 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ if not (len(X) == len(X_recon) == len(spectral_types)):\n+ raise RuntimeError(\"Observation alignment: incompatible lengths\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n@@ -2821,7 +2814,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(max(vals.min(), np.finfo(float).tiny)), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n@@ -2831,12 +2824,19 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls}: excluded {missing} of {len(vals)} outside support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n+ hist_kwargs = dict(density=True)\n+ if xscale == \"linear\":\n+ hist_kwargs = dict(density=False,weights=np.full(len(vals),1/(len(vals)*np.diff(bins)[0])))\n+ ax.text(.03,.12,f\"{cls}: density normalized by total {len(vals)}, support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n alpha=0.55,\n color=color,\n- density=True,\n+ **hist_kwargs,\n label=f\"{cls} m\u00e9diane={med:.3f}\",\n )\n # Marqueur central robuste pour chaque classe.\n@@ -3054,7 +3054,7 @@\n MS_G_HOT + (MS_G_COOL - MS_G_HOT) * 0.35,\n ),\n (T_LO + (T_HI - T_LO) * 0.25, MS_G_COOL - 0.10),\n- (T_LO + T_PAD, G_HI - T_PAD * 2),\n+ (T_LO + T_PAD, G_HI - G_PAD * 2),\n (T_LO + T_PAD, G_HI - G_PAD),\n (T_LO + (T_HI - T_LO) * 0.20, MS_G_COOL + MS_W * 0.6),\n (\n@@ -3212,7 +3212,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 population fournie\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "candidate_sha256": "ee8cd6d8f1ef1c46ee4090f4f586b985e2d03225f410542ee204556856af65d4", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_disclosure_identifies_the_relevant_exclusion_bound", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_localized_numbers_and_population_suffixes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_variance_claims_use_numbers_and_component_meaning", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[vertical]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[horizontal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_denominators_and_claims_are_distinguishable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x0000025349126CE0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x000002534895AA40>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:265: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x00000253488EC200>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:277: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:278: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:298: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:297: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:306: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:377: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1533/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1533/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:329: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:445: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:450: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:236: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "..................................................................FFFFFF [ 78%]\nFFFFFFFFF.FFFFFFFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x0000025349126CE0>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x000002534895AA40>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:265: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x00000253488EC200>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:277: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:278: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:298: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:297: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:306: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:377: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1533/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1533/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:329: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:445: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:450: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:236: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n25 failed, 67 passed in 34.74s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_disclosure_identifies_the_relevant_exclusion_bound", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_localized_numbers_and_population_suffixes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_variance_claims_use_numbers_and_component_meaning", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[vertical]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[horizontal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_denominators_and_claims_are_distinguishable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1090, + 1092, + 1095, + 1096, + 1097, + 1098, + 1099, + 1102, + 1104, + 1105, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1126, + 1127, + 1128, + 1129, + 1131, + 1132, + 1133, + 1135, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1149, + 1150, + 1151, + 1153, + 1154, + 1155, + 1156, + 1158, + 1159, + 1162, + 1164, + 1165, + 1169, + 1171, + 1172, + 1173, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1195, + 1196, + 1197, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1211, + 1212, + 1215, + 1217, + 1219, + 1221, + 1222, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1232, + 1234, + 1236, + 1237, + 1239, + 1241, + 1242, + 1243, + 1244, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1252, + 1253, + 1255, + 1260, + 1261, + 1262, + 1266, + 1267, + 1268, + 1269, + 1271, + 1272, + 1274, + 1275, + 1277, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1285, + 1287, + 1288, + 1289, + 1291, + 1292, + 1293, + 1294, + 1295, + 1296, + 1298, + 1299, + 1300, + 1302, + 1303, + 1304, + 1305, + 1306, + 1308, + 1309, + 1312, + 1314, + 1316, + 1317, + 1318, + 1319, + 1320, + 1321, + 1323, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1332, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1343, + 1351, + 1356, + 1359, + 1360, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1371, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1386, + 1387, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1414, + 1415, + 1417, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1426, + 1427, + 1428, + 1429, + 1430, + 1432, + 1433, + 1434, + 1435, + 1437, + 1440, + 1441, + 1442, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1455, + 1456, + 1457, + 1458, + 1460, + 1461, + 1462, + 1463, + 1464, + 1466, + 1467, + 1468, + 1470, + 1475, + 1478, + 1481, + 1482, + 1483, + 1484, + 1485, + 1487, + 1488, + 1489, + 1490, + 1493, + 1494, + 1495, + 1498, + 1499, + 1501, + 1502, + 1504, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1516, + 1517, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1529, + 1530, + 1531, + 1532, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1558, + 1559, + 1560, + 1562, + 1563, + 1564, + 1565, + 1567, + 1568, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1582, + 1583, + 1584, + 1585, + 1587, + 1588, + 1589, + 1590, + 1592, + 1593, + 1594, + 1596, + 1599, + 1600, + 1601, + 1604, + 1605, + 1607, + 1608, + 1609, + 1612, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1620, + 1621, + 1622, + 1623, + 1624, + 1625, + 1627, + 1628, + 1629, + 1630, + 1631, + 1633, + 1634, + 1635, + 1636, + 1638, + 1643, + 1647, + 1648, + 1649, + 1650, + 1651, + 1652, + 1654, + 1655, + 1656, + 1657, + 1658, + 1660, + 1662, + 1664, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1675, + 1676, + 1678, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1690, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1703, + 1704, + 1705, + 1706, + 1707, + 1709, + 1711, + 1712, + 1714, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1724, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1736, + 1752, + 1753, + 1754, + 1755, + 1756, + 1757, + 1759, + 1761, + 1762, + 1763, + 1764, + 1765, + 1767, + 1768, + 1769, + 1771, + 1776, + 1777, + 1790, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1798, + 1799, + 1800, + 1801, + 1802, + 1803, + 1806, + 1808, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1819, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1832, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1845, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1854, + 1855, + 1856, + 1857, + 1860, + 1861, + 1862, + 1865, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1875, + 1876, + 1877, + 1879, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1890, + 1911, + 1912, + 1915, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1925, + 1927, + 1928, + 1931, + 1932, + 1933, + 1934, + 1935, + 1936, + 1938, + 1939, + 1940, + 1941, + 1942, + 1943, + 1945, + 1946, + 1947, + 1949, + 1951, + 1955, + 1956, + 1960, + 1961, + 1962, + 1963, + 1965, + 1966, + 1967, + 1969, + 1970, + 1972, + 1973, + 1974, + 1975, + 1976, + 1978, + 1979, + 1980, + 1982, + 1983, + 1984, + 1986, + 1987, + 1988, + 1989, + 1991, + 1992, + 1993, + 1995, + 1996, + 1998, + 1999, + 2000, + 2002, + 2006, + 2007, + 2011, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2021, + 2022, + 2024, + 2025, + 2026, + 2027, + 2028, + 2029, + 2031, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2045, + 2046, + 2048, + 2049, + 2050, + 2054, + 2061, + 2064, + 2067, + 2068, + 2069, + 2071, + 2072, + 2073, + 2075, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2085, + 2086, + 2087, + 2088, + 2089, + 2091, + 2092, + 2094, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2106, + 2107, + 2109, + 2112, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2121, + 2122, + 2124, + 2125, + 2127, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2136, + 2137, + 2139, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2148, + 2149, + 2150, + 2152, + 2153, + 2154, + 2155, + 2157, + 2158, + 2159, + 2161, + 2165, + 2169, + 2170, + 2171, + 2172, + 2174, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2185, + 2186, + 2188, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2198, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2206, + 2207, + 2208, + 2209, + 2213, + 2218, + 2219, + 2220, + 2223, + 2224, + 2226, + 2229, + 2230, + 2232, + 2233, + 2234, + 2235, + 2237, + 2238, + 2240, + 2241, + 2242, + 2243, + 2245, + 2246, + 2247, + 2249, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2259, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2268, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2278, + 2279, + 2280, + 2281, + 2282, + 2283, + 2287, + 2292, + 2296, + 2297, + 2298, + 2299, + 2301, + 2302, + 2303, + 2304, + 2305, + 2307, + 2308, + 2313, + 2314, + 2315, + 2316, + 2319, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2527, + 2528, + 2529, + 2543, + 2557, + 2558, + 2559, + 2560, + 2563, + 2564, + 2566, + 2567, + 2568, + 2569, + 2570, + 2571, + 2572, + 2574, + 2576, + 2577, + 2578, + 2581, + 2582, + 2591, + 2592, + 2593, + 2595, + 2596, + 2598, + 2602, + 2603, + 2604, + 2605, + 2606, + 2608, + 2611, + 2612, + 2614, + 2615, + 2616, + 2617, + 2618, + 2619, + 2620, + 2621, + 2622, + 2623, + 2624, + 2625, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2633, + 2634, + 2635, + 2637, + 2639, + 2640, + 2641, + 2642, + 2643, + 2644, + 2645, + 2646, + 2647, + 2649, + 2650, + 2651, + 2652, + 2654, + 2655, + 2657, + 2658, + 2659, + 2661, + 2662, + 2663, + 2665, + 2670, + 2671, + 2674, + 2675, + 2678, + 2679, + 2680, + 2711, + 2712, + 2715, + 2717, + 2718, + 2719, + 2720, + 2724, + 2725, + 2726, + 2727, + 2728, + 2729, + 2733, + 2734, + 2735, + 2736, + 2737, + 2738, + 2741, + 2742, + 2743, + 2744, + 2745, + 2746, + 2747, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2771, + 2772, + 2774, + 2775, + 2777, + 2778, + 2779, + 2780, + 2781, + 2782, + 2783, + 2785, + 2786, + 2787, + 2788, + 2790, + 2791, + 2792, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "........................................................................ [ 78%]\n.................... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n92 passed in 42.88s\n", + "stderr": "" + } + }, + { + "name": "JOINT", + "selection": "", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 154 + ], + [ + 185 + ], + [ + 288 + ], + [ + 869 + ], + [ + 1018 + ], + [ + 1087 + ], + [ + 1110 + ], + [ + 1178, + 1179 + ], + [ + 1252 + ], + [ + 1319 + ], + [ + 1414 + ], + [ + 1559 + ], + [ + 2019 + ], + [ + 2040 + ], + [ + 2068 + ], + [ + 2278 + ], + [ + 2320 + ], + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2527, + 2528 + ], + [ + 2816 + ], + [ + 2827, + 2828, + 2829 + ], + [ + 3035 + ], + [ + 3209 + ] + ], + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, 100 * ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"{n_thresh} PCs\\n\u2192 {pca_analyzer.explained_variance_ratio[:n_thresh].sum()*100:.1f}%\",\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n@@ -285,7 +285,7 @@\n df = df.sort_values(\"loading\")\n \n # Couleur encodant le signe physique de la contribution.\n- colors = [\"#DD8452\" if v < 0 else \"#4C72B0\" for v in df[\"loading\"]]\n+ colors = [\"#CC5500\" if v < 0 else \"#0055CC\" for v in df[\"loading\"]]\n fig, ax = plt.subplots(figsize=(8, max(4, n_top * 0.35)), dpi=self.dpi)\n \n ax.barh(\n@@ -869,7 +869,7 @@\n ax.text(\n lam,\n ymax * 0.88,\n- nom,\n+ nom.replace(chr(92)*2, chr(92)),\n rotation=90,\n fontsize=6,\n color=\"crimson\",\n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ fig.canvas.print_figure(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n@@ -1084,9 +1084,7 @@\n \"Autoencodeur \u2014 Historique d'entra\u00eenement (LAMOST DR5)\", fontsize=13, y=1.02\n )\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_training_history\")\n return fig, axes\n \n def plot_ae_embedding(self, Z, meta, y, save_path=None):\n@@ -1109,6 +1107,7 @@\n \n PALETTE = {\"STAR\": \"#4C72B0\", \"GALAXY\": \"#DD8452\", \"QSO\": \"#55A868\"}\n MARKERS = {\"STAR\": \"o\", \"GALAXY\": \"s\", \"QSO\": \"^\"}\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -1176,6 +1175,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in axes[len(idx):]:\n+ unused.set_visible(False)\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n@@ -1248,9 +1249,7 @@\n ax.legend(fontsize=9)\n ax.grid(True, alpha=0.3)\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_ae_vs_pca\")\n return fig, ax\n \n def plot_latent_interpolation(\n@@ -1317,7 +1316,7 @@\n classes = np.unique(y)\n palette = [\"#4C72B0\", \"#DD8452\", \"#55A868\", \"#C44E52\"]\n fig, ax = plt.subplots(figsize=(9, 5), dpi=self.dpi)\n- for cls, color in zip(classes, palette):\n+ for cls, color in zip(classes, palette*((len(classes)+len(palette)-1)//len(palette))):\n mask = y == cls\n vals = mse_per_sample[mask]\n # Histogrammes normalis\u00e9s pour comparer les formes de distribution.\n@@ -1413,7 +1412,7 @@\n ),\n )\n sm = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n@@ -1558,7 +1557,7 @@\n )\n ax.grid(True, alpha=0.2)\n sm2 = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm2.set_array([])\n plt.colorbar(\n@@ -2017,7 +2016,7 @@\n ncols = 4\n nrows = (n_show + ncols - 1) // ncols\n fig, axes = plt.subplots(nrows, ncols, figsize=(5 * ncols, 4 * nrows), dpi=120)\n- axes_flat = axes.flatten() if n_show > 1 else [axes]\n+ axes_flat = np.asarray(axes).ravel()\n \n for ax_i, cid in zip(axes_flat, top_cids):\n profile = cluster_means.loc[cid]\n@@ -2038,7 +2037,7 @@\n ax_i.set_xlabel(\"Score moyen (\u03c3)\", fontsize=8)\n ax_i.grid(axis=\"x\", alpha=0.3)\n ax_i.set_xlim(-3, 3)\n- for ax_i in axes_flat[n_show:]:\n+ for ax_i in axes_flat[len(top_cids):]:\n ax_i.axis(\"off\")\n fig.suptitle(\n \"Top-5 features caract\u00e9ristiques par cluster HDBSCAN\\n\"\n@@ -2066,7 +2065,7 @@\n \n # V\u00e9rifie si une vraie probabilit\u00e9 est disponible.\n classes_pred = sorted(set(y_pred))\n- has_proba = confidence is not None and not np.all(confidence == 1.0)\n+ has_proba = confidence is not None\n fig, axes = plt.subplots(1, 3, figsize=(22, 8), dpi=self.dpi)\n \n ax = axes[0]\n@@ -2276,7 +2275,7 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0, 1.01)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n@@ -2318,6 +2317,7 @@\n ]\n \n fig, axes = plt.subplots(1, 1 + len(available), figsize=(22, 5), dpi=self.dpi)\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2533,6 +2524,8 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ if not (len(X) == len(X_recon) == len(spectral_types)):\n+ raise RuntimeError(\"Observation alignment: incompatible lengths\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n@@ -2821,7 +2814,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(max(vals.min(), np.finfo(float).tiny)), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n@@ -2831,6 +2824,9 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls}: excluded {missing} of {len(vals)} outside support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n@@ -3054,7 +3050,7 @@\n MS_G_HOT + (MS_G_COOL - MS_G_HOT) * 0.35,\n ),\n (T_LO + (T_HI - T_LO) * 0.25, MS_G_COOL - 0.10),\n- (T_LO + T_PAD, G_HI - T_PAD * 2),\n+ (T_LO + T_PAD, G_HI - G_PAD * 2),\n (T_LO + T_PAD, G_HI - G_PAD),\n (T_LO + (T_HI - T_LO) * 0.20, MS_G_COOL + MS_W * 0.6),\n (\n@@ -3212,7 +3208,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 population fournie\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "candidate_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_disclosure_identifies_the_relevant_exclusion_bound", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_localized_numbers_and_population_suffixes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_variance_claims_use_numbers_and_component_meaning", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[vertical]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[horizontal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_denominators_and_claims_are_distinguishable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x0000016ADA33ECE0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x0000016ADB196A40>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:265: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x0000016ADB168200>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:277: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:278: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:298: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:297: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:306: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:377: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1535/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1535/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:329: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:445: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:450: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:236: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "..................................................................FFFFFF [ 78%]\nFFFFFFFFF.FFFFFFFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x0000016ADA33ECE0>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x0000016ADB196A40>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:265: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x0000016ADB168200>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:277: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:278: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:298: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:297: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:306: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:377: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1535/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1535/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:329: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:445: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:450: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:236: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n25 failed, 67 passed in 34.25s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_disclosure_identifies_the_relevant_exclusion_bound", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_localized_numbers_and_population_suffixes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_variance_claims_use_numbers_and_component_meaning", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[vertical]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[horizontal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_denominators_and_claims_are_distinguishable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1090, + 1092, + 1095, + 1096, + 1097, + 1098, + 1099, + 1102, + 1104, + 1105, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1126, + 1127, + 1128, + 1129, + 1131, + 1132, + 1133, + 1135, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1149, + 1150, + 1151, + 1153, + 1154, + 1155, + 1156, + 1158, + 1159, + 1162, + 1164, + 1165, + 1169, + 1171, + 1172, + 1173, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1195, + 1196, + 1197, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1211, + 1212, + 1215, + 1217, + 1219, + 1221, + 1222, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1232, + 1234, + 1236, + 1237, + 1239, + 1241, + 1242, + 1243, + 1244, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1252, + 1253, + 1255, + 1260, + 1261, + 1262, + 1266, + 1267, + 1268, + 1269, + 1271, + 1272, + 1274, + 1275, + 1277, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1285, + 1287, + 1288, + 1289, + 1291, + 1292, + 1293, + 1294, + 1295, + 1296, + 1298, + 1299, + 1300, + 1302, + 1303, + 1304, + 1305, + 1306, + 1308, + 1309, + 1312, + 1314, + 1316, + 1317, + 1318, + 1319, + 1320, + 1321, + 1323, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1332, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1343, + 1351, + 1356, + 1359, + 1360, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1371, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1386, + 1387, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1414, + 1415, + 1417, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1426, + 1427, + 1428, + 1429, + 1430, + 1432, + 1433, + 1434, + 1435, + 1437, + 1440, + 1441, + 1442, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1455, + 1456, + 1457, + 1458, + 1460, + 1461, + 1462, + 1463, + 1464, + 1466, + 1467, + 1468, + 1470, + 1475, + 1478, + 1481, + 1482, + 1483, + 1484, + 1485, + 1487, + 1488, + 1489, + 1490, + 1493, + 1494, + 1495, + 1498, + 1499, + 1501, + 1502, + 1504, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1516, + 1517, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1529, + 1530, + 1531, + 1532, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1558, + 1559, + 1560, + 1562, + 1563, + 1564, + 1565, + 1567, + 1568, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1582, + 1583, + 1584, + 1585, + 1587, + 1588, + 1589, + 1590, + 1592, + 1593, + 1594, + 1596, + 1599, + 1600, + 1601, + 1604, + 1605, + 1607, + 1608, + 1609, + 1612, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1620, + 1621, + 1622, + 1623, + 1624, + 1625, + 1627, + 1628, + 1629, + 1630, + 1631, + 1633, + 1634, + 1635, + 1636, + 1638, + 1643, + 1647, + 1648, + 1649, + 1650, + 1651, + 1652, + 1654, + 1655, + 1656, + 1657, + 1658, + 1660, + 1662, + 1664, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1675, + 1676, + 1678, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1690, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1703, + 1704, + 1705, + 1706, + 1707, + 1709, + 1711, + 1712, + 1714, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1724, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1736, + 1752, + 1753, + 1754, + 1755, + 1756, + 1757, + 1759, + 1761, + 1762, + 1763, + 1764, + 1765, + 1767, + 1768, + 1769, + 1771, + 1776, + 1777, + 1790, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1798, + 1799, + 1800, + 1801, + 1802, + 1803, + 1806, + 1808, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1819, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1832, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1845, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1854, + 1855, + 1856, + 1857, + 1860, + 1861, + 1862, + 1865, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1875, + 1876, + 1877, + 1879, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1890, + 1911, + 1912, + 1915, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1925, + 1927, + 1928, + 1931, + 1932, + 1933, + 1934, + 1935, + 1936, + 1938, + 1939, + 1940, + 1941, + 1942, + 1943, + 1945, + 1946, + 1947, + 1949, + 1951, + 1955, + 1956, + 1960, + 1961, + 1962, + 1963, + 1965, + 1966, + 1967, + 1969, + 1970, + 1972, + 1973, + 1974, + 1975, + 1976, + 1978, + 1979, + 1980, + 1982, + 1983, + 1984, + 1986, + 1987, + 1988, + 1989, + 1991, + 1992, + 1993, + 1995, + 1996, + 1998, + 1999, + 2000, + 2002, + 2006, + 2007, + 2011, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2021, + 2022, + 2024, + 2025, + 2026, + 2027, + 2028, + 2029, + 2031, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2045, + 2046, + 2048, + 2049, + 2050, + 2054, + 2061, + 2064, + 2067, + 2068, + 2069, + 2071, + 2072, + 2073, + 2075, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2085, + 2086, + 2087, + 2088, + 2089, + 2091, + 2092, + 2094, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2106, + 2107, + 2109, + 2112, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2121, + 2122, + 2124, + 2125, + 2127, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2136, + 2137, + 2139, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2148, + 2149, + 2150, + 2152, + 2153, + 2154, + 2155, + 2157, + 2158, + 2159, + 2161, + 2165, + 2169, + 2170, + 2171, + 2172, + 2174, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2185, + 2186, + 2188, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2198, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2206, + 2207, + 2208, + 2209, + 2213, + 2218, + 2219, + 2220, + 2223, + 2224, + 2226, + 2229, + 2230, + 2232, + 2233, + 2234, + 2235, + 2237, + 2238, + 2240, + 2241, + 2242, + 2243, + 2245, + 2246, + 2247, + 2249, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2259, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2268, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2278, + 2279, + 2280, + 2281, + 2282, + 2283, + 2287, + 2292, + 2296, + 2297, + 2298, + 2299, + 2301, + 2302, + 2303, + 2304, + 2305, + 2307, + 2308, + 2313, + 2314, + 2315, + 2316, + 2319, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2527, + 2528, + 2529, + 2543, + 2557, + 2558, + 2559, + 2560, + 2563, + 2564, + 2566, + 2567, + 2568, + 2569, + 2570, + 2571, + 2572, + 2574, + 2576, + 2577, + 2578, + 2581, + 2582, + 2591, + 2592, + 2593, + 2595, + 2596, + 2598, + 2602, + 2603, + 2604, + 2605, + 2606, + 2608, + 2611, + 2612, + 2614, + 2615, + 2616, + 2617, + 2618, + 2619, + 2620, + 2621, + 2622, + 2623, + 2624, + 2625, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2633, + 2634, + 2635, + 2637, + 2639, + 2640, + 2641, + 2642, + 2643, + 2644, + 2645, + 2646, + 2647, + 2649, + 2650, + 2651, + 2652, + 2654, + 2655, + 2657, + 2658, + 2659, + 2661, + 2662, + 2663, + 2665, + 2670, + 2671, + 2674, + 2675, + 2678, + 2679, + 2680, + 2711, + 2712, + 2715, + 2717, + 2718, + 2719, + 2720, + 2724, + 2725, + 2726, + 2727, + 2728, + 2729, + 2733, + 2734, + 2735, + 2736, + 2737, + 2738, + 2741, + 2742, + 2743, + 2744, + 2745, + 2746, + 2747, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2771, + 2772, + 2774, + 2775, + 2777, + 2778, + 2779, + 2780, + 2781, + 2782, + 2783, + 2785, + 2786, + 2787, + 2788, + 2790, + 2791, + 2792, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2859, + 2865, + 2866, + 2869, + 2871, + 2872, + 2873, + 2874, + 2875, + 2877, + 2879, + 2880, + 2882, + 2883, + 2885, + 2891, + 2892, + 2893, + 2894, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2906, + 2907, + 2908, + 2909, + 2911, + 2912, + 2913, + 2914, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2924, + 2926, + 2928, + 2930, + 2931, + 2932, + 2942, + 2943, + 2944, + 2945, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2954, + 2955, + 2956, + 2957, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2966, + 2967, + 2968, + 2970, + 2971, + 2973, + 2974, + 2976, + 2977, + 2979, + 2982, + 2995, + 2996, + 2997, + 2999, + 3000, + 3001, + 3002, + 3004, + 3005, + 3006, + 3011, + 3012, + 3013, + 3014, + 3016, + 3017, + 3026, + 3027, + 3028, + 3031, + 3034, + 3035, + 3037, + 3038, + 3039, + 3040, + 3041, + 3042, + 3043, + 3044, + 3046, + 3047, + 3048, + 3049, + 3050, + 3052, + 3053, + 3054, + 3055, + 3056, + 3057, + 3058, + 3060, + 3064, + 3065, + 3066, + 3067, + 3068, + 3069, + 3070, + 3071, + 3073, + 3074, + 3075, + 3076, + 3077, + 3078, + 3082, + 3083, + 3084, + 3085, + 3086, + 3087, + 3088, + 3089, + 3091, + 3092, + 3093, + 3094, + 3095, + 3096, + 3097, + 3101, + 3102, + 3103, + 3104, + 3105, + 3106, + 3107, + 3108, + 3110, + 3111, + 3112, + 3113, + 3114, + 3115, + 3116, + 3122, + 3125, + 3138, + 3139, + 3140, + 3141, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3151, + 3152, + 3153, + 3156, + 3157, + 3158, + 3159, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3167, + 3168, + 3169, + 3170, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3184, + 3185, + 3186, + 3187, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3199, + 3200, + 3201, + 3202, + 3204, + 3205, + 3207, + 3208, + 3209, + 3210, + 3212, + 3213, + 3215, + 3216, + 3218, + 3219 + ], + "stdout": "........................................................................ [ 78%]\n.................... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-3148y3d5\\result.xml -\n92 passed in 42.39s\n", + "stderr": "" + } + } + ], + "executed_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/proofs_dimred_visualizer.py": "2ece4074314b52b26994bb1593e941e6b008e21d70dbc8de7b89d7fd6a3937fd", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "a8add777477f11103850247cf348b3e5ff5e31faa1aaa932953645d3c3475a81", + "tests/test_visualizer_review_contracts.py": "1398f78f67090f47ed09f57bb0d12d1f49d7abfa781e57e39c5a4f50f251bbea" + }, + "protected_unchanged": true +} diff --git a/audit/m28_r3_final_validation_results.json b/audit/m28_r3_final_validation_results.json new file mode 100644 index 0000000..b36910c --- /dev/null +++ b/audit/m28_r3_final_validation_results.json @@ -0,0 +1,151 @@ +{ + "active_head": "e924f36f24412a435f5ca54a95cdfad914835ff2", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "executable": "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "versions": { + "numpy": "2.4.6", + "pandas": "3.1.1", + "scipy": "1.17.1", + "scikit-learn": "1.9.1", + "matplotlib": "3.11.2", + "pytest": "8.4.2", + "black": "24.4.2", + "ruff": "0.5.0", + "pillow": "13.0.0" + }, + "effective_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/visualizer_review_contracts.py": "a8add777477f11103850247cf348b3e5ff5e31faa1aaa932953645d3c3475a81", + "tests/test_visualizer_review_contracts.py": "1398f78f67090f47ed09f57bb0d12d1f49d7abfa781e57e39c5a4f50f251bbea", + "audit/check_m28_evidence.py": "bac3e5210eb94a2642c3dbb6e79824899cb66920d1c11233f900de38a61d1485", + "audit/check_m28_boundaries.py": "72f0c956c8719acafe0d9c07fa05e93c3f4d69ce297a8befeccef73bad4cdfb0", + "audit/check_m28_validation.py": "fda730977f875e9b951171a89e5e14d44ca0fa7524e2c7651e45d743bc581e1b", + "audit/check_m28_review.py": "9a2a2e41e9e87a965f6f345432f619db60c697456d883a3b3a56f6ba4c8540e9" + }, + "commands": [ + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-W", + "error", + "--junitxml=test-results/m28-targeted-validation.xml" + ], + "exit_code": 0, + "stdout": ".................................................................. [100%]\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-targeted-validation.xml -\n66 passed in 7.85s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "--junitxml=test-results/m28-complete-validation.xml" + ], + "exit_code": 0, + "stdout": "........................................................................ [ 10%]\n........................................................................ [ 20%]\n........................................................................ [ 30%]\n........................................................................ [ 41%]\n........................................................................ [ 51%]\n........................................................................ [ 61%]\n........................................................................ [ 72%]\n........................................................................ [ 82%]\n........................................................................ [ 92%]\n.................................................. [100%]\n============================== warnings summary ===============================\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_partial_esa_supplement_merges_without_losing_xmatch_rows\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_bulk_without_matches_stops_auto_fallback\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_cone_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_retry_limit_raises_or_falls_back_by_mode\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_transient_failure_retries_then_succeeds\n C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\tools\\gaia_crossmatcher.py:1210: Pandas4Warning: The inplace keyword in DataFrame.drop is deprecated and will be removed in a future version (PDEP-8).\n See https://pandas.pydata.org/docs/dev/whatsnew/v3.1.0.html#deprecation-inplace for more details.\n df_merged.drop(columns=[\"objid\"], inplace=True, errors=\"ignore\")\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-complete-validation.xml -\n698 passed, 62 deselected, 7 warnings in 22.88s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "--import-mode=importlib", + "--junitxml=test-results/m28-importlib-validation.xml" + ], + "exit_code": 0, + "stdout": "........................................................................ [ 10%]\n........................................................................ [ 20%]\n........................................................................ [ 30%]\n........................................................................ [ 41%]\n........................................................................ [ 51%]\n........................................................................ [ 61%]\n........................................................................ [ 72%]\n........................................................................ [ 82%]\n........................................................................ [ 92%]\n.................................................. [100%]\n============================== warnings summary ===============================\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_partial_esa_supplement_merges_without_losing_xmatch_rows\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_bulk_without_matches_stops_auto_fallback\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_cone_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_retry_limit_raises_or_falls_back_by_mode\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_transient_failure_retries_then_succeeds\n C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\tools\\gaia_crossmatcher.py:1210: Pandas4Warning: The inplace keyword in DataFrame.drop is deprecated and will be removed in a future version (PDEP-8).\n See https://pandas.pydata.org/docs/dev/whatsnew/v3.1.0.html#deprecation-inplace for more details.\n df_merged.drop(columns=[\"objid\"], inplace=True, errors=\"ignore\")\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-importlib-validation.xml -\n698 passed, 62 deselected, 7 warnings in 22.62s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "black", + "--check", + "src", + "tests", + "scripts", + "app.py", + "audit/check_m28_evidence.py", + "audit/check_m28_boundaries.py", + "audit/check_m28_validation.py", + "audit/check_m28_review.py" + ], + "exit_code": 0, + "stdout": "", + "stderr": "All done! \u2728 \ud83c\udf70 \u2728\n48 files would be left unchanged.\n" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "ruff", + "check", + "src", + "tests", + "scripts", + "app.py", + "audit/check_m28_evidence.py", + "audit/check_m28_boundaries.py", + "audit/check_m28_validation.py", + "audit/check_m28_review.py" + ], + "exit_code": 0, + "stdout": "All checks passed!\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pip", + "check" + ], + "exit_code": 0, + "stdout": "No broken requirements found.\n", + "stderr": "" + }, + { + "command": [ + "git", + "diff", + "--check" + ], + "exit_code": 0, + "stdout": "", + "stderr": "" + }, + { + "command": [ + "git", + "diff", + "--exit-code", + "39dad874610745ccd456d26972e90f6fb3a11405", + "--", + "src", + "notebooks", + "data", + "models", + "requirements", + "pyproject.toml", + ".github", + "app.py", + "AGENTS.md" + ], + "exit_code": 0, + "stdout": "", + "stderr": "" + } + ], + "all_commands_passed": true +} diff --git a/audit/m28_r3_frozen_controls_results.json b/audit/m28_r3_frozen_controls_results.json new file mode 100644 index 0000000..df4a4f5 --- /dev/null +++ b/audit/m28_r3_frozen_controls_results.json @@ -0,0 +1,9944 @@ +{ + "active_head": "e924f36f24412a435f5ca54a95cdfad914835ff2", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6" + }, + "mode": "proofs", + "runs": [ + { + "name": "C14_renderable_mathtext", + "method": "plot_eigenspectra", + "selection": "default_eigenspectrum", + "changed_lines": [ + 869, + 872 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "b3ea1715d05ad316ba907994cf51f603855f85e89009b7cc151e980a76481c6f", + "patch": "--- \n+++ \n@@ -869,7 +869,7 @@\n ax.text(\n lam,\n ymax * 0.88,\n- nom,\n+ nom.replace(chr(92)*2, chr(92)),\n rotation=90,\n fontsize=6,\n color=\"crimson\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_eigenspectrum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:445: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:450: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:445: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:450: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\n1 failed, 91 deselected in 1.87s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_eigenspectrum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n1 passed, 91 deselected in 0.96s\n", + "stderr": "" + } + }, + { + "name": "C01_equivalent_percent", + "method": "plot_variance_explained", + "selection": "real_pca_variance", + "changed_lines": [ + 154 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "8b74921a093af4f83f08890f592c4c0952217b3b46be509081ed8d56a050a69e", + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, 100 * ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n1 passed, 91 deselected in 2.74s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n1 passed, 91 deselected in 2.63s\n", + "stderr": "" + } + }, + { + "name": "C02_alternative_export", + "method": "_save", + "selection": "real_export_readable", + "changed_lines": [ + 1018 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "95ac85f7fbb81f0932ea60d4962a8d00b3eae4d5c2b4148589e17266f2a9d953", + "patch": "--- \n+++ \n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ fig.canvas.print_figure(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n2 passed, 90 deselected in 1.16s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n2 passed, 90 deselected in 1.15s\n", + "stderr": "" + } + }, + { + "name": "C03_alternative_palette", + "method": "plot_loadings_bar", + "selection": "signed_loadings", + "changed_lines": [ + 288 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c8833a129a116501b3ba962a48791953da763ac97fcf1c87d41ade0e8e6994f4", + "patch": "--- \n+++ \n@@ -285,7 +285,7 @@\n df = df.sort_values(\"loading\")\n \n # Couleur encodant le signe physique de la contribution.\n- colors = [\"#DD8452\" if v < 0 else \"#4C72B0\" for v in df[\"loading\"]]\n+ colors = [\"#CC5500\" if v < 0 else \"#0055CC\" for v in df[\"loading\"]]\n fig, ax = plt.subplots(figsize=(8, max(4, n_top * 0.35)), dpi=self.dpi)\n \n ax.barh(\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "signed_loadings", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n1 passed, 91 deselected in 0.88s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "signed_loadings", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n1 passed, 91 deselected in 0.85s\n", + "stderr": "" + } + }, + { + "name": "C04_explicit_alignment_refusal", + "method": "plot_ae_recon_by_spectral_type", + "selection": "reconstruction_cardinality", + "changed_lines": [ + 2536, + 2537, + 2538 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "7e93d1ce3f02ab35d08218ceb54010b192f74840f324818bf3788f4e7c52dfc4", + "patch": "--- \n+++ \n@@ -2533,6 +2533,8 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ if not (len(X) == len(X_recon) == len(spectral_types)):\n+ raise RuntimeError(\"Observation alignment: incompatible lengths\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\n1 failed, 91 deselected in 0.80s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2537, + 2674, + 2679, + 2680, + 2803, + 2807, + 2865, + 2871, + 2872, + 2985, + 2988 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n1 passed, 91 deselected in 0.59s\n", + "stderr": "" + } + }, + { + "name": "C05_gravity_units", + "method": "plot_hr_teff_regions", + "selection": "hr_region_vertices", + "changed_lines": [ + 3039, + 3057 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "552acec69a5400440601692a3036f2dfff766b4b46643f0d66fcc879c98696b7", + "patch": "--- \n+++ \n@@ -3054,7 +3054,7 @@\n MS_G_HOT + (MS_G_COOL - MS_G_HOT) * 0.35,\n ),\n (T_LO + (T_HI - T_LO) * 0.25, MS_G_COOL - 0.10),\n- (T_LO + T_PAD, G_HI - T_PAD * 2),\n+ (T_LO + T_PAD, G_HI - G_PAD * 2),\n (T_LO + T_PAD, G_HI - G_PAD),\n (T_LO + (T_HI - T_LO) * 0.20, MS_G_COOL + MS_W * 0.6),\n (\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 91 deselected in 1.12s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n1 passed, 91 deselected in 0.98s\n", + "stderr": "" + } + }, + { + "name": "C06_count_omitted", + "method": "plot_hr_teff_regions", + "selection": "hr_population_title", + "changed_lines": [ + 3213, + 3215 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "ed1ffd93182289c0629f048ccb0acfbb0860b292a686da314b2682e25ff8bc3d", + "patch": "--- \n+++ \n@@ -3212,7 +3212,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 population fournie\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x000002535ACD8200>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x000002539CF43A00>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x000002535ACD8200>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x000002539CF43A00>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\n2 failed, 90 deselected in 1.29s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n2 passed, 90 deselected in 1.13s\n", + "stderr": "" + } + }, + { + "name": "C07_small_errors_retained", + "method": "plot_ae_error_distribution_logscale", + "selection": "log_histogram_keeps", + "changed_lines": [ + 2823, + 2824 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "fc96d6a64f3b0e40da6bf7c8e281e7e7a0134e037c22c97456ffc5ee5fd55cdc", + "patch": "--- \n+++ \n@@ -2821,7 +2821,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(max(vals.min(), np.finfo(float).tiny)), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\n1 failed, 91 deselected in 1.29s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n1 passed, 91 deselected in 1.25s\n", + "stderr": "" + } + }, + { + "name": "C08_scalar_axes_supported", + "method": "plot_ae_embedding", + "selection": "no_physical_columns and plot_ae_embedding", + "changed_lines": [ + 1112, + 1113 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "9c7bb5270f973d9ab2eed8f781d84cbee44d923aa5b2d0d39a80a92d9a9400bb", + "patch": "--- \n+++ \n@@ -1109,6 +1109,7 @@\n \n PALETTE = {\"STAR\": \"#4C72B0\", \"GALAXY\": \"#DD8452\", \"QSO\": \"#55A868\"}\n MARKERS = {\"STAR\": \"o\", \"GALAXY\": \"s\", \"QSO\": \"^\"}\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_ae_embedding", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:277: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:277: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\n1 failed, 91 deselected in 0.86s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_ae_embedding", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1115, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1126, + 1128, + 1129, + 1130, + 1131, + 1133, + 1155, + 1156, + 1157, + 1158, + 1160, + 1161, + 1164, + 1166, + 1167, + 1217, + 1257, + 1262, + 1263, + 1264, + 1316, + 1353, + 1358, + 1472, + 1477, + 1598, + 1601, + 1602, + 1603, + 1640, + 1645, + 1773, + 1778, + 1779, + 1953, + 1957, + 1958, + 2004, + 2008, + 2009, + 2056, + 2063, + 2163, + 2167, + 2215, + 2220, + 2221, + 2222, + 2289, + 2294, + 2391, + 2396, + 2528, + 2534, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n1 passed, 91 deselected in 0.70s\n", + "stderr": "" + } + }, + { + "name": "C09_zoom_scalar_axes_supported", + "method": "plot_latent_zoomed", + "selection": "no_physical_columns and plot_latent_zoomed", + "changed_lines": [ + 2321, + 2322 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c3d12005048a8d692f607a4977148b4a708dcf18f570cbdb4bd3bf710e6347fa", + "patch": "--- \n+++ \n@@ -2318,6 +2318,7 @@\n ]\n \n fig, axes = plt.subplots(1, 1 + len(available), figsize=(22, 5), dpi=self.dpi)\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_latent_zoomed", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:278: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:278: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\n1 failed, 91 deselected in 0.85s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_latent_zoomed", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2324, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2335, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2343, + 2345, + 2381, + 2382, + 2384, + 2385, + 2387, + 2388, + 2389, + 2391, + 2396, + 2528, + 2534, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n1 passed, 91 deselected in 0.69s\n", + "stderr": "" + } + }, + { + "name": "C10_profile_single_slot", + "method": "plot_hdbscan_feature_profiles", + "selection": "cluster_profiles_unavailable and 1", + "changed_lines": [ + 2020 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "e56d76446680544910180a2a4f1e5d99b53d58361a1fff7f4980a2113d7c0ffb", + "patch": "--- \n+++ \n@@ -2017,7 +2017,7 @@\n ncols = 4\n nrows = (n_show + ncols - 1) // ncols\n fig, axes = plt.subplots(nrows, ncols, figsize=(5 * ncols, 4 * nrows), dpi=120)\n- axes_flat = axes.flatten() if n_show > 1 else [axes]\n+ axes_flat = np.asarray(axes).ravel()\n \n for ax_i, cid in zip(axes_flat, top_cids):\n profile = cluster_means.loc[cid]\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_profiles_unavailable and 1", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:298: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:297: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:298: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:297: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\n1 failed, 91 deselected in 0.87s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_profiles_unavailable and 1", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n1 passed, 91 deselected in 0.70s\n", + "stderr": "" + } + }, + { + "name": "C11_display_whole_trust_range", + "method": "plot_trustworthiness", + "selection": "trustworthiness_axis_contains", + "changed_lines": [ + 2279 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "ad1c94878e026d9ddc675825313ec1ed5709f1128675e1fe1487f0c7310149fc", + "patch": "--- \n+++ \n@@ -2276,7 +2276,7 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0, 1.01)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:342: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:342: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\n1 failed, 91 deselected in 2.66s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n1 passed, 91 deselected in 2.28s\n", + "stderr": "" + } + }, + { + "name": "C12_hide_unused_reconstructions", + "method": "plot_ae_reconstruction", + "selection": "more_reconstructions or reconstruction_drawn_rows", + "changed_lines": [ + 1179, + 1180, + 1181 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c80b84e92e07174091bbdc7418f60720c07530d8c68d7023c1a3961ee09beac6", + "patch": "--- \n+++ \n@@ -1176,6 +1176,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in axes[len(idx):]:\n+ unused.set_visible(False)\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions or reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "...F [100%]\n================================== FAILURES ===================================\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n1 failed, 3 passed, 88 deselected in 1.42s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions or reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1180, + 1181, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1196, + 1197, + 1198, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1210, + 1212, + 1213, + 1216, + 1218, + 1258, + 1263, + 1264, + 1265, + 1317, + 1354, + 1359, + 1473, + 1478, + 1599, + 1602, + 1603, + 1604, + 1641, + 1646, + 1774, + 1779, + 1780, + 1954, + 1958, + 1959, + 2005, + 2009, + 2010, + 2057, + 2064, + 2164, + 2168, + 2216, + 2221, + 2222, + 2223, + 2290, + 2295, + 2392, + 2397, + 2529, + 2535, + 2674, + 2679, + 2680, + 2803, + 2807, + 2865, + 2871, + 2872, + 2985, + 2988 + ], + "stdout": ".... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n4 passed, 88 deselected in 1.24s\n", + "stderr": "" + } + }, + { + "name": "F01_always_refuse_alignment", + "method": "plot_ae_recon_by_spectral_type", + "selection": "reconstruction_cardinality or spectral_type_means", + "changed_lines": [ + 2536, + 2537 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "e0e0abae314f5e5eb2996177d79dd93ed57a2e3f751236cfc0d37a00e3a0b195", + "patch": "--- \n+++ \n@@ -2533,6 +2533,7 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ raise RuntimeError(\"Observation alignment unavailable\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality or spectral_type_means", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".F [100%]\n================================== FAILURES ===================================\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\n1 failed, 1 passed, 90 deselected in 0.89s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality or spectral_type_means", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:333: in test_spectral_type_means_for_aligned_unequal_classes\n result = c.viz.plot_ae_recon_by_spectral_type(\nsrc\\dimred\\dimred_visualizer.py:2536: in plot_ae_recon_by_spectral_type\n raise RuntimeError(\"Observation alignment unavailable\")\nE RuntimeError: Observation alignment unavailable\n\nDuring handling of the above exception, another exception occurred:\ntests\\test_dimred_visualizer.py:337: in test_spectral_type_means_for_aligned_unequal_classes\n assert False, f\"Valid aligned reconstruction must remain usable: {exc}\"\nE AssertionError: Valid aligned reconstruction must remain usable: Observation alignment unavailable\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": "F. [100%]\n================================== FAILURES ===================================\n____________ test_spectral_type_means_for_aligned_unequal_classes _____________\ntests\\test_dimred_visualizer.py:333: in test_spectral_type_means_for_aligned_unequal_classes\n result = c.viz.plot_ae_recon_by_spectral_type(\nsrc\\dimred\\dimred_visualizer.py:2536: in plot_ae_recon_by_spectral_type\n raise RuntimeError(\"Observation alignment unavailable\")\nE RuntimeError: Observation alignment unavailable\n\nDuring handling of the above exception, another exception occurred:\ntests\\test_dimred_visualizer.py:337: in test_spectral_type_means_for_aligned_unequal_classes\n assert False, f\"Valid aligned reconstruction must remain usable: {exc}\"\nE AssertionError: Valid aligned reconstruction must remain usable: Observation alignment unavailable\nE assert False\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_spectral_type_means_for_aligned_unequal_classes\n1 failed, 1 passed, 90 deselected in 0.84s\n", + "stderr": "" + } + }, + { + "name": "F02_empty_hr", + "method": "plot_hr_teff_regions", + "selection": "hr_region_vertices", + "changed_lines": [ + 3160, + 3161 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "6bd35b2de52d08c61471145b27b92596e95f09e2266dd9e394fed28562632d61", + "patch": "--- \n+++ \n@@ -3157,6 +3157,7 @@\n cbar.ax.tick_params(labelsize=9)\n \n # \u2500\u2500 R\u00e9gions stellaires \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n+ REGIONS = []\n for region in REGIONS:\n patch = MplPolygon(\n np.array(region[\"poly\"]),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 91 deselected in 1.12s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:193: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert ax.patches, \"Valid HR regional figure must contain informative regions\"\nE AssertionError: Valid HR regional figure must contain informative regions\nE assert \nE + where = .patches" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3200, + 3204, + 3205, + 3206, + 3207, + 3209, + 3210, + 3212, + 3213, + 3214, + 3215, + 3217, + 3218, + 3220, + 3221, + 3223, + 3224 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:193: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert ax.patches, \"Valid HR regional figure must contain informative regions\"\nE AssertionError: Valid HR regional figure must contain informative regions\nE assert \nE + where = .patches\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 91 deselected in 1.11s\n", + "stderr": "" + } + }, + { + "name": "C13_integrated_kde_mass", + "method": "plot_latent_kde", + "selection": "kde_labeled_regions or real_kde_reproducible", + "changed_lines": [ + 2427, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "302fe10399fed0e6d61b3108c8095e46ad1f329d40eba152223be16efb5e5020", + "patch": "--- \n+++ \n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered) / ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass, p)]) for p in [.68, .95, .99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions or real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 1 passed, 86 deselected in 16.60s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions or real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "...... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n6 passed, 86 deselected in 27.10s\n", + "stderr": "" + } + }, + { + "name": "F03_normal_thresholds_for_every_kde", + "method": "plot_latent_kde", + "selection": "kde_labeled_regions", + "changed_lines": [ + 2433, + 2434, + 2435 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "a4009e917c5151559ea5006b33f0465c7f5ca163cfec14c0d5f29f3755c56b0b", + "patch": "--- \n+++ \n@@ -2430,24 +2430,7 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ levels = [(1-p)/(2*np.pi) for p in [.99, .95, .68]]\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 87 deselected in 16.09s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.04626727\nE Max relative difference among violations: 0.04673462\nE ACTUAL: array(0.943733)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.04998785\nE Max relative difference among violations: 0.05049278\nE ACTUAL: array(0.940012)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02752703\nE Max relative difference among violations: 0.02780508\nE ACTUAL: array(0.962473)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02209737\nE Max relative difference among violations: 0.02232058\nE ACTUAL: array(0.967903)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02727094\nE Max relative difference among violations: 0.0275464\nE ACTUAL: array(0.962729)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2435, + 2436, + 2437, + 2438, + 2440, + 2441, + 2442, + 2443, + 2446, + 2447, + 2448, + 2450, + 2451, + 2452, + 2454, + 2455, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2467, + 2468, + 2470, + 2471, + 2473, + 2474, + 2476, + 2478, + 2479, + 2480, + 2481, + 2482, + 2483, + 2484, + 2485, + 2486, + 2487, + 2488, + 2489, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2502, + 2503, + 2504, + 2506, + 2507, + 2508, + 2510, + 2516, + 2655, + 2660, + 2661, + 2784, + 2788, + 2846, + 2852, + 2853, + 2966, + 2969 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.04626727\nE Max relative difference among violations: 0.04673462\nE ACTUAL: array(0.943733)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.04998785\nE Max relative difference among violations: 0.05049278\nE ACTUAL: array(0.940012)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02752703\nE Max relative difference among violations: 0.02780508\nE ACTUAL: array(0.962473)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02209737\nE Max relative difference among violations: 0.02232058\nE ACTUAL: array(0.967903)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02727094\nE Max relative difference among violations: 0.0275464\nE ACTUAL: array(0.962729)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 87 deselected in 16.07s\n", + "stderr": "" + } + } + ], + "executed_files_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/proofs_dimred_visualizer.py": "2ece4074314b52b26994bb1593e941e6b008e21d70dbc8de7b89d7fd6a3937fd", + "tests/visualizer_review_contracts.py": "79671f840cc76d57ebdc1257b624c8de6078bc5db79023738f7128d3a77b0dec", + "tests/test_visualizer_review_contracts.py": "1d2818457af205945f30ea1774bab0aadcde707a4ded95f3bc92ac0c09e40e9a" + }, + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x0000023E28A404A0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x0000023E2FACEA40>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:265: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x0000023E2FACD0E0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:277: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:278: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:298: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:297: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:306: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:377: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1544/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1544/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:342: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:445: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:450: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:249: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1199, + 1200, + 1201, + 1202, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FFFFFFFFFFFFFFF.FFFFFFFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x0000023E28A404A0>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x0000023E2FACEA40>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:265: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x0000023E2FACD0E0>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:277: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:278: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:298: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:297: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:306: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:377: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1544/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1544/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:342: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:445: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:450: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:249: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-dnkww9to\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n25 failed, 1 passed in 25.17s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_r3_frozen_mutations_results.json b/audit/m28_r3_frozen_mutations_results.json new file mode 100644 index 0000000..e9eb3bc --- /dev/null +++ b/audit/m28_r3_frozen_mutations_results.json @@ -0,0 +1,10113 @@ +{ + "active_head": "e924f36f24412a435f5ca54a95cdfad914835ff2", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6" + }, + "mode": "mutations", + "runs": [ + { + "name": "M01_color_row_roll", + "method": "plot_embedding", + "selection": "embedding_exact_observation", + "changed_lines": [ + 528 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "fbb7900faa59e5ae27981ef362e9ee99e219001a78cd03f3f8854d4bd679b3e1", + "patch": "--- \n+++ \n@@ -525,7 +525,7 @@\n # Chaque classe est trac\u00e9e s\u00e9par\u00e9ment pour g\u00e9rer couleur + marqueur.\n classes = np.unique(y)\n for cls in classes:\n- mask = y == cls\n+ mask = np.roll(y == cls, 1)\n ax.scatter(\n Z[mask, 0],\n Z[mask, 1],\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "embedding_exact_observation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n3 passed, 63 deselected in 0.84s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "embedding_exact_observation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:47: in test_embedding_exact_observation_associations\n assert_array_equal(offsets(sc), c.Z[c.y == cls])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 41.0 (ACTUAL), 7.0 (DESIRED)\nE [0, 1]: 13.0 (ACTUAL), 31.0 (DESIRED)\nE Max absolute difference among violations: 34.\nE Max relative difference among violations: 4.85714286\nE ACTUAL: array([[41., 13.]])\nE DESIRED: array([[ 7., 31.]])" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F.. [100%]\n================================== FAILURES ===================================\n___________ test_embedding_exact_observation_associations[classes] ____________\ntests\\test_dimred_visualizer.py:47: in test_embedding_exact_observation_associations\n assert_array_equal(offsets(sc), c.Z[c.y == cls])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 41.0 (ACTUAL), 7.0 (DESIRED)\nE [0, 1]: 13.0 (ACTUAL), 31.0 (DESIRED)\nE Max absolute difference among violations: 34.\nE Max relative difference among violations: 4.85714286\nE ACTUAL: array([[41., 13.]])\nE DESIRED: array([[ 7., 31.]])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_embedding_exact_observation_associations[classes]\n1 failed, 2 passed, 63 deselected in 1.00s\n", + "stderr": "" + } + }, + { + "name": "M02_variance_units", + "method": "plot_variance_explained", + "selection": "real_pca_variance", + "changed_lines": [ + 154 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "0026e09d1cd7f509e47cea034e79cdff94c6037a4a7ceaaa50d0b42ae70b7fcf", + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n1 passed, 65 deselected in 2.75s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:119: in test_real_pca_variance_and_reconstruction_energy\n assert_allclose(heights(axes[0]), np.array([9, 4, 1]) / 14 * 100)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.6428571428571428 (ACTUAL), 64.28571428571429 (DESIRED)\nE [1]: 0.2857142857142857 (ACTUAL), 28.57142857142857 (DESIRED)\nE [2]: 0.07142857142857142 (ACTUAL), 7.142857142857142 (DESIRED)\nE Max absolute difference among violations: 63.64285714\nE Max relative difference among violations: 0.99\nE ACTUAL: array([0.642857, 0.285714, 0.071429])\nE DESIRED: array([64.285714, 28.571429, 7.142857])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______________ test_real_pca_variance_and_reconstruction_energy _______________\ntests\\test_dimred_visualizer.py:119: in test_real_pca_variance_and_reconstruction_energy\n assert_allclose(heights(axes[0]), np.array([9, 4, 1]) / 14 * 100)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.6428571428571428 (ACTUAL), 64.28571428571429 (DESIRED)\nE [1]: 0.2857142857142857 (ACTUAL), 28.57142857142857 (DESIRED)\nE [2]: 0.07142857142857142 (ACTUAL), 7.142857142857142 (DESIRED)\nE Max absolute difference among violations: 63.64285714\nE Max relative difference among violations: 0.99\nE ACTUAL: array([0.642857, 0.285714, 0.071429])\nE DESIRED: array([64.285714, 28.571429, 7.142857])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_pca_variance_and_reconstruction_energy\n1 failed, 65 deselected in 2.56s\n", + "stderr": "" + } + }, + { + "name": "M03_best_is_max", + "method": "plot_training_history", + "selection": "training_history_minimum", + "changed_lines": [ + 1048 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "be86a4cc9d42b00927f9f7478ce5938b3f78e432208053698595573184c30360", + "patch": "--- \n+++ \n@@ -1045,7 +1045,7 @@\n ax.plot(epochs, train_loss, color=\"#4C72B0\", lw=2, label=\"Train\")\n ax.plot(epochs, val_loss, color=\"#DD8452\", lw=2, ls=\"--\", label=\"Validation\")\n # Best epoch d\u00e9fini sur la val_loss minimale (crit\u00e8re de s\u00e9lection mod\u00e8le).\n- best_epoch = int(np.argmin(val_loss)) + 1\n+ best_epoch = int(np.argmax(val_loss)) + 1\n best_val = min(val_loss)\n ax.axvline(\n best_epoch,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "training_history_minimum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n2 passed, 64 deselected in 1.24s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "training_history_minimum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:242: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:242: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n____ test_training_history_minimum_is_not_last_and_distinct_series[False] _____\ntests\\test_dimred_visualizer.py:242: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])\n_____ test_training_history_minimum_is_not_last_and_distinct_series[True] _____\ntests\\test_dimred_visualizer.py:242: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_training_history_minimum_is_not_last_and_distinct_series[False]\nFAILED tests/test_dimred_visualizer.py::test_training_history_minimum_is_not_last_and_distinct_series[True]\n2 failed, 64 deselected in 1.41s\n", + "stderr": "" + } + }, + { + "name": "M04_family_median", + "method": "plot_ae_error_by_family", + "selection": "error_family_mean", + "changed_lines": [ + 2740, + 2742 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "0c1e0f746f1208318c3a41311cf26ca2247439221e86b8fb26a7f94c2d6ca839", + "patch": "--- \n+++ \n@@ -2739,7 +2739,7 @@\n # Agr\u00e9gation par famille pour r\u00e9sum\u00e9 interpr\u00e9table.\n df_fam = (\n df_feat_mse.groupby(\"family\")[\"mse\"]\n- .agg([\"mean\", \"std\", \"count\"])\n+ .agg([\"median\", \"std\", \"count\"]).rename(columns={\"median\": \"mean\"})\n .rename(columns={\"mean\": \"mse_mean\", \"std\": \"mse_std\", \"count\": \"n_feats\"})\n .reset_index()\n .sort_values(\"mse_mean\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "error_family_mean", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n1 passed, 65 deselected in 0.74s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "error_family_mean", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:317: in test_error_family_mean_is_feature_weighted_and_std_is_between_features\n assert_allclose(widths(axes[0]), [2.5, 50 / 3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 2 (50%)\nE Mismatch at index:\nE [1]: 16.0 (ACTUAL), 16.666666666666668 (DESIRED)\nE Max absolute difference among violations: 0.66666667\nE Max relative difference among violations: 0.04\nE ACTUAL: array([ 2.5, 16. ])\nE DESIRED: array([ 2.5 , 16.666667])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n___ test_error_family_mean_is_feature_weighted_and_std_is_between_features ____\ntests\\test_dimred_visualizer.py:317: in test_error_family_mean_is_feature_weighted_and_std_is_between_features\n assert_allclose(widths(axes[0]), [2.5, 50 / 3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 2 (50%)\nE Mismatch at index:\nE [1]: 16.0 (ACTUAL), 16.666666666666668 (DESIRED)\nE Max absolute difference among violations: 0.66666667\nE Max relative difference among violations: 0.04\nE ACTUAL: array([ 2.5, 16. ])\nE DESIRED: array([ 2.5 , 16.666667])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_error_family_mean_is_feature_weighted_and_std_is_between_features\n1 failed, 65 deselected in 0.90s\n", + "stderr": "" + } + }, + { + "name": "M05_ae_as_pca", + "method": "plot_ae_vs_pca", + "selection": "ae_pca_comparison", + "changed_lines": [ + 1235, + 1236 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "4490d68bd49df52e8e3e33fcd3f3deb6afafc15b43d98456789b3a77da97d69c", + "patch": "--- \n+++ \n@@ -1233,7 +1233,7 @@\n for _, row in ae_df.iterrows():\n # Chaque AE est repr\u00e9sent\u00e9 par une ligne horizontale de performance.\n ax.axhline(\n- row[\"mse_mean\"], color=\"#DD8452\", ls=\"--\", lw=2, label=row[\"method\"]\n+ pca_df[\"mse_mean\"].iloc[0], color=\"#DD8452\", ls=\"--\", lw=2, label=row[\"method\"]\n )\n ax.annotate(\n # Position d'annotation choisie pour rester lisible sur la courbe PCA.\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "ae_pca_comparison", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n1 passed, 65 deselected in 0.79s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "ae_pca_comparison", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:277: in test_ae_pca_comparison_does_not_substitute_metrics\n assert_allclose(ax.lines[1].get_ydata(), [0.17, 0.17])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE [1]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE Max absolute difference among violations: 0.73\nE Max relative difference among violations: 4.29411765\nE ACTUAL: array([0.9, 0.9])\nE DESIRED: array([0.17, 0.17])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_____________ test_ae_pca_comparison_does_not_substitute_metrics ______________\ntests\\test_dimred_visualizer.py:277: in test_ae_pca_comparison_does_not_substitute_metrics\n assert_allclose(ax.lines[1].get_ydata(), [0.17, 0.17])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE [1]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE Max absolute difference among violations: 0.73\nE Max relative difference among violations: 4.29411765\nE ACTUAL: array([0.9, 0.9])\nE DESIRED: array([0.17, 0.17])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_ae_pca_comparison_does_not_substitute_metrics\n1 failed, 65 deselected in 0.87s\n", + "stderr": "" + } + }, + { + "name": "M06_identity_reconstruction", + "method": "plot_ae_reconstruction", + "selection": "reconstruction_drawn_rows", + "changed_lines": [ + 1182 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "9d374b178f5f5ea7f05df0b08d34b31f12680c59bb26223a5818b649832fa9f4", + "patch": "--- \n+++ \n@@ -1179,7 +1179,7 @@\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n- recon = X_recon[si]\n+ recon = X[si]\n mse_i = float(np.mean((orig - recon) ** 2))\n ax.plot(x_pos, orig, color=\"#4C72B0\", lw=1.5, alpha=0.9, label=\"Original\")\n ax.plot(\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n3 passed, 63 deselected in 1.13s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:258: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 11.0 (ACTUAL), 12.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 4.0 (DESIRED)\nE Max absolute difference among violations: 2.\nE Max relative difference among violations: 0.5\nE ACTUAL: array([11., 2.])\nE DESIRED: array([12., 4.])" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:258: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 25.0 (DESIRED)\nE [1]: 43.0 (ACTUAL), 55.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.24\nE ACTUAL: array([19., 43.])\nE DESIRED: array([25., 55.])" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:258: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 3.0 (ACTUAL), 5.0 (DESIRED)\nE [1]: 17.0 (ACTUAL), 21.0 (DESIRED)\nE Max absolute difference among violations: 4.\nE Max relative difference among violations: 0.4\nE ACTUAL: array([ 3., 17.])\nE DESIRED: array([ 5., 21.])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFF [100%]\n================================== FAILURES ===================================\n______________ test_reconstruction_drawn_rows_and_manual_mse[1] _______________\ntests\\test_dimred_visualizer.py:258: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 11.0 (ACTUAL), 12.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 4.0 (DESIRED)\nE Max absolute difference among violations: 2.\nE Max relative difference among violations: 0.5\nE ACTUAL: array([11., 2.])\nE DESIRED: array([12., 4.])\n______________ test_reconstruction_drawn_rows_and_manual_mse[3] _______________\ntests\\test_dimred_visualizer.py:258: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 25.0 (DESIRED)\nE [1]: 43.0 (ACTUAL), 55.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.24\nE ACTUAL: array([19., 43.])\nE DESIRED: array([25., 55.])\n______________ test_reconstruction_drawn_rows_and_manual_mse[6] _______________\ntests\\test_dimred_visualizer.py:258: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 3.0 (ACTUAL), 5.0 (DESIRED)\nE [1]: 17.0 (ACTUAL), 21.0 (DESIRED)\nE Max absolute difference among violations: 4.\nE Max relative difference among violations: 0.4\nE ACTUAL: array([ 3., 17.])\nE DESIRED: array([ 5., 21.])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_reconstruction_drawn_rows_and_manual_mse[1]\nFAILED tests/test_dimred_visualizer.py::test_reconstruction_drawn_rows_and_manual_mse[3]\nFAILED tests/test_dimred_visualizer.py::test_reconstruction_drawn_rows_and_manual_mse[6]\n3 failed, 63 deselected in 1.30s\n", + "stderr": "" + } + }, + { + "name": "M07_hr_color_roll", + "method": "plot_hr_diagram_embedding", + "selection": "hr_finite_triplets", + "changed_lines": [ + 920, + 923 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "9747542c8f796dcfe2334714186a9d2f1f6a2e0de7604ec1c1feb5eddbce86b4", + "patch": "--- \n+++ \n@@ -920,7 +920,7 @@\n sc = ax.scatter(\n teff[valid],\n logg[valid],\n- c=z_coord[valid],\n+ c=np.roll(z_coord[valid], 1),\n cmap=self.cmap_continuous,\n s=2,\n alpha=0.5,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "hr_finite_triplets", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 907, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n2 passed, 64 deselected in 1.03s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "hr_finite_triplets", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:97: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 11.0 (DESIRED)\nE [1]: 11.0 (ACTUAL), 23.0 (DESIRED)\nE [2]: 23.0 (ACTUAL), 19.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.72727273\nE ACTUAL: MaskedArray([19., 11., 23.])\nE DESIRED: array([11., 23., 19.])" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:97: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 43.0 (ACTUAL), 2.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 5.0 (DESIRED)\nE [2]: 5.0 (ACTUAL), 43.0 (DESIRED)\nE Max absolute difference among violations: 41.\nE Max relative difference among violations: 20.5\nE ACTUAL: MaskedArray([43., 2., 5.])\nE DESIRED: array([ 2., 5., 43.])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 907, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________________ test_hr_finite_triplets_and_physical_axes[0] _________________\ntests\\test_dimred_visualizer.py:97: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 11.0 (DESIRED)\nE [1]: 11.0 (ACTUAL), 23.0 (DESIRED)\nE [2]: 23.0 (ACTUAL), 19.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.72727273\nE ACTUAL: MaskedArray([19., 11., 23.])\nE DESIRED: array([11., 23., 19.])\n________________ test_hr_finite_triplets_and_physical_axes[1] _________________\ntests\\test_dimred_visualizer.py:97: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 43.0 (ACTUAL), 2.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 5.0 (DESIRED)\nE [2]: 5.0 (ACTUAL), 43.0 (DESIRED)\nE Max absolute difference among violations: 41.\nE Max relative difference among violations: 20.5\nE ACTUAL: MaskedArray([43., 2., 5.])\nE DESIRED: array([ 2., 5., 43.])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_hr_finite_triplets_and_physical_axes[0]\nFAILED tests/test_dimred_visualizer.py::test_hr_finite_triplets_and_physical_axes[1]\n2 failed, 64 deselected in 1.20s\n", + "stderr": "" + } + }, + { + "name": "M08_cluster_colors", + "method": "plot_hdbscan_clusters", + "selection": "real_analyzer_state", + "changed_lines": [ + 1390, + 1393 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "4c7322cb7de655cb5ea317a71b8cec2ec4de336c2e1866b9f78c378a3ae00a1b", + "patch": "--- \n+++ \n@@ -1390,7 +1390,7 @@\n ax.scatter(\n Z[mask, 0],\n Z[mask, 1],\n- c=[color_map[cid]],\n+ c=[color_map[cluster_ids[-1]]],\n s=2,\n alpha=0.75,\n rasterized=True,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n3 passed, 63 deselected in 1.10s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:401: in test_hdbscan_real_analyzer_state_and_point_populations\n assert_allclose(sc.get_facecolors()[0, :3], hdb.color_map_[cid][:3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F.. [100%]\n================================== FAILURES ===================================\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels0] _______\ntests\\test_dimred_visualizer.py:401: in test_hdbscan_real_analyzer_state_and_point_populations\n assert_allclose(sc.get_facecolors()[0, :3], hdb.color_map_[cid][:3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels0]\n1 failed, 2 passed, 63 deselected in 1.23s\n", + "stderr": "" + } + }, + { + "name": "M09_tsne_as_umap", + "method": "plot_trustworthiness", + "selection": "real_sklearn_trustworthiness", + "changed_lines": [ + 2244 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "219f76a998ddc435edb3c68374e089462acdda0d735e2384192c4c04d16aab75", + "patch": "--- \n+++ \n@@ -2241,7 +2241,7 @@\n with warnings.catch_warnings():\n warnings.simplefilter(\"ignore\")\n tu = trustworthiness(X_sub, Zu_sub, n_neighbors=k, metric=\"euclidean\")\n- tt = trustworthiness(X_sub, Zt_sub, n_neighbors=k, metric=\"euclidean\")\n+ tt = trustworthiness(X_sub, Zu_sub, n_neighbors=k, metric=\"euclidean\")\n # Stocke T(k) pour les deux m\u00e9thodes afin de tracer la courbe comparative.\n trust_u.append(tu)\n trust_t.append(tt)\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n2 passed, 64 deselected in 2.62s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:594: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 24 / 24 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -1.14005850694597 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 0.8518760376374508 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: -0.9468537822225308 (ACTUAL), -0.6451940968015629 (DESIRED)\nE [1, 1]: -0.2999476978380483 (ACTUAL), 0.0825255266666682 (DESIRED)\nE [2, 0]: 0.7540394717615756 (ACTUAL), -0.11873997633083841 (DESIRED)\nE Max absolute difference among violations: 3.39499489\nE Max relative difference among violations: 13.23342732\nE ACTUAL: array([[-1.140059, 0.851876],\nE [-0.946854, -0.299948],\nE [ 0.754039, 1.994789],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-0.645194, 0.082526],\nE [-0.11874 , -1.400206],..." + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:594: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 18 / 18 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -1.14005850694597 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 0.8518760376374508 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: -1.215555026777933 (ACTUAL), -1.0861640144823521 (DESIRED)\nE [1, 1]: 0.13882201829008786 (ACTUAL), -0.5693158913378338 (DESIRED)\nE [2, 0]: -0.13429338949088465 (ACTUAL), -1.215555026777933 (DESIRED)\nE Max absolute difference among violations: 3.39499489\nE Max relative difference among violations: 7.48292869\nE ACTUAL: array([[-1.140059, 0.851876],\nE [-1.215555, 0.138822],\nE [-0.134293, 1.177617],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-1.086164, -0.569316],\nE [-1.215555, 0.138822],..." + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[12] ________\ntests\\test_dimred_visualizer.py:594: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 24 / 24 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -1.14005850694597 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 0.8518760376374508 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: -0.9468537822225308 (ACTUAL), -0.6451940968015629 (DESIRED)\nE [1, 1]: -0.2999476978380483 (ACTUAL), 0.0825255266666682 (DESIRED)\nE [2, 0]: 0.7540394717615756 (ACTUAL), -0.11873997633083841 (DESIRED)\nE Max absolute difference among violations: 3.39499489\nE Max relative difference among violations: 13.23342732\nE ACTUAL: array([[-1.140059, 0.851876],\nE [-0.946854, -0.299948],\nE [ 0.754039, 1.994789],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-0.645194, 0.082526],\nE [-0.11874 , -1.400206],...\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[9] _________\ntests\\test_dimred_visualizer.py:594: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 18 / 18 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -1.14005850694597 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 0.8518760376374508 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: -1.215555026777933 (ACTUAL), -1.0861640144823521 (DESIRED)\nE [1, 1]: 0.13882201829008786 (ACTUAL), -0.5693158913378338 (DESIRED)\nE [2, 0]: -0.13429338949088465 (ACTUAL), -1.215555026777933 (DESIRED)\nE Max absolute difference among violations: 3.39499489\nE Max relative difference among violations: 7.48292869\nE ACTUAL: array([[-1.140059, 0.851876],\nE [-1.215555, 0.138822],\nE [-0.134293, 1.177617],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-1.086164, -0.569316],\nE [-1.215555, 0.138822],...\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[12]\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[9]\n2 failed, 64 deselected in 3.08s\n", + "stderr": "" + } + }, + { + "name": "M10_confidence_constant", + "method": "plot_xgboost_umap", + "selection": "xgboost_classes_confidence", + "changed_lines": [ + 2095, + 2098 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "f1bb69629105b2443c7a96086390fc68bde21d1e395b2ea7129ac0dae024f231", + "patch": "--- \n+++ \n@@ -2095,7 +2095,7 @@\n sc = ax.scatter(\n Z_umap_aligned[:, 0],\n Z_umap_aligned[:, 1],\n- c=confidence,\n+ c=np.ones(len(confidence)),\n cmap=\"RdYlGn\",\n vmin=0.4,\n vmax=1.0,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n2 passed, 64 deselected in 0.98s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:522: in test_xgboost_classes_confidence_and_cluster_associations\n assert_array_equal(axes[1].collections[0].get_array(), confidence)\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 6 / 6 (100%)\nE First 5 mismatches are at indices:\nE [0]: 1.0 (ACTUAL), 0.45 (DESIRED)\nE [1]: 1.0 (ACTUAL), 0.7 (DESIRED)\nE [2]: 1.0 (ACTUAL), 0.95 (DESIRED)\nE [3]: 1.0 (ACTUAL), 0.6 (DESIRED)\nE [4]: 1.0 (ACTUAL), 0.8 (DESIRED)\nE Max absolute difference among violations: 0.55\nE Max relative difference among violations: 1.22222222\nE ACTUAL: MaskedArray([1., 1., 1., 1., 1., 1.])\nE DESIRED: array([0.45, 0.7 , 0.95, 0.6 , 0.8 , 0.5 ])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".F [100%]\n================================== FAILURES ===================================\n____ test_xgboost_classes_confidence_and_cluster_associations[confidence1] ____\ntests\\test_dimred_visualizer.py:522: in test_xgboost_classes_confidence_and_cluster_associations\n assert_array_equal(axes[1].collections[0].get_array(), confidence)\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 6 / 6 (100%)\nE First 5 mismatches are at indices:\nE [0]: 1.0 (ACTUAL), 0.45 (DESIRED)\nE [1]: 1.0 (ACTUAL), 0.7 (DESIRED)\nE [2]: 1.0 (ACTUAL), 0.95 (DESIRED)\nE [3]: 1.0 (ACTUAL), 0.6 (DESIRED)\nE [4]: 1.0 (ACTUAL), 0.8 (DESIRED)\nE Max absolute difference among violations: 0.55\nE Max relative difference among violations: 1.22222222\nE ACTUAL: MaskedArray([1., 1., 1., 1., 1., 1.])\nE DESIRED: array([0.45, 0.7 , 0.95, 0.6 , 0.8 , 0.5 ])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_xgboost_classes_confidence_and_cluster_associations[confidence1]\n1 failed, 1 passed, 64 deselected in 1.11s\n", + "stderr": "" + } + }, + { + "name": "M11_synthesis_ae_as_pca", + "method": "plot_synthesis_grid", + "selection": "synthesis_preserves", + "changed_lines": [ + 2887 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "4f007fdb7dcae0839188918aad4eb9f77662409d9c1413989ff8d3ddeed36082", + "patch": "--- \n+++ \n@@ -2884,7 +2884,7 @@\n if Z_umap is not None:\n # UMAP est optionnel selon le notebook ex\u00e9cut\u00e9.\n METHODS.append((\"UMAP\", Z_umap, \"UMAP 1\", \"UMAP 2\"))\n- METHODS.append((\"Autoencodeur\", Z_ae, \"Latent 1\", \"Latent 2\"))\n+ METHODS.append((\"Autoencodeur\", scores_pca, \"Latent 1\", \"Latent 2\"))\n \n PARAMS = [\n (\"Classe spectrale\", None, None),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n2 passed, 64 deselected in 0.91s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:666: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:666: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[False] ___\ntests\\test_dimred_visualizer.py:666: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[True] ____\ntests\\test_dimred_visualizer.py:666: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]\n2 failed, 64 deselected in 1.11s\n", + "stderr": "" + } + }, + { + "name": "M12_stability_median", + "method": "plot_stability", + "selection": "stability_producer", + "changed_lines": [ + 740, + 744 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "c521e47969b0df802a97ecf521f45fca1a471bac3804187362b0ac01038a728f", + "patch": "--- \n+++ \n@@ -741,7 +741,7 @@\n 0.98,\n 0.97,\n # Convention actuelle: on exclut souvent seed de r\u00e9f\u00e9rence (index 0) de la moyenne.\n- f\"Moyenne : {dists[1:].mean():.4f}\" if len(dists) > 1 else \"\",\n+ f\"Moyenne : {np.median(dists[1:]):.4f}\" if len(dists) > 1 else \"\",\n transform=ax.transAxes,\n ha=\"right\",\n va=\"top\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "stability_producer", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n1 passed, 65 deselected in 1.06s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "stability_producer", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:636: in test_stability_producer_order_and_mean_without_reference\n assert f\"{expected:.4f}\" in text(ax)\nE assert '0.0120' in 'Moyenne : 0.0057'\nE + where 'Moyenne : 0.0057' = text()" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n__________ test_stability_producer_order_and_mean_without_reference ___________\ntests\\test_dimred_visualizer.py:636: in test_stability_producer_order_and_mean_without_reference\n assert f\"{expected:.4f}\" in text(ax)\nE assert '0.0120' in 'Moyenne : 0.0057'\nE + where 'Moyenne : 0.0057' = text()\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_stability_producer_order_and_mean_without_reference\n1 failed, 65 deselected in 1.18s\n", + "stderr": "" + } + }, + { + "name": "M13_profile_sign_erased", + "method": "plot_hdbscan_feature_profiles", + "selection": "profiles_signed_top", + "changed_lines": [ + 2026 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "91e32e38df5eeff868d93e08f22bde30dfd975fd423fe2b1a239a738d636a7cc", + "patch": "--- \n+++ \n@@ -2023,7 +2023,7 @@\n profile = cluster_means.loc[cid]\n # Top-5 par amplitude absolue (exc\u00e8s ou d\u00e9ficit).\n top5 = profile.abs().nlargest(5).index.tolist()\n- vals = profile[top5].values\n+ vals = np.abs(profile[top5].values)\n colors = [\"#C0392B\" if v > 0 else \"#2980B9\" for v in vals]\n labels = [\n f.replace(\"feature_\", \"\").replace(\"_eq_width\", \"\\nEW\")[:14]\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "profiles_signed_top", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n1 passed, 65 deselected in 0.73s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "profiles_signed_top", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:493: in test_cluster_profiles_signed_top_five_not_first_five\n assert_allclose(widths(axes[0]), [2, 0.9, -0.6, 0.4, -0.1])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 5 (40%)\nE Mismatch at indices:\nE [2]: 0.6 (ACTUAL), -0.6 (DESIRED)\nE [4]: 0.1 (ACTUAL), -0.1 (DESIRED)\nE Max absolute difference among violations: 1.2\nE Max relative difference among violations: 2.\nE ACTUAL: array([2. , 0.9, 0.6, 0.4, 0.1])\nE DESIRED: array([ 2. , 0.9, -0.6, 0.4, -0.1])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_cluster_profiles_signed_top_five_not_first_five _____________\ntests\\test_dimred_visualizer.py:493: in test_cluster_profiles_signed_top_five_not_first_five\n assert_allclose(widths(axes[0]), [2, 0.9, -0.6, 0.4, -0.1])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 5 (40%)\nE Mismatch at indices:\nE [2]: 0.6 (ACTUAL), -0.6 (DESIRED)\nE [4]: 0.1 (ACTUAL), -0.1 (DESIRED)\nE Max absolute difference among violations: 1.2\nE Max relative difference among violations: 2.\nE ACTUAL: array([2. , 0.9, 0.6, 0.4, 0.1])\nE DESIRED: array([ 2. , 0.9, -0.6, 0.4, -0.1])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_cluster_profiles_signed_top_five_not_first_five\n1 failed, 65 deselected in 0.88s\n", + "stderr": "" + } + }, + { + "name": "M14_density_wrong_population", + "method": "plot_ae_error_distribution", + "selection": "histogram_densities", + "changed_lines": [ + 1324, + 1329 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "d5407d955fea773baff307002def63203823044aaeb4696dac2eed4d256b0523", + "patch": "--- \n+++ \n@@ -1326,7 +1326,7 @@\n bins=60,\n alpha=0.55,\n color=color,\n- density=True,\n+ density=False,\n label=f\"{cls} (n={mask.sum()}, \u03bc={vals.mean():.4f})\",\n )\n # M\u00e9diane trac\u00e9e pour robuste comparaison inter-classes.\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "histogram_densities", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n1 passed, 65 deselected in 1.49s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "histogram_densities", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:359: in test_histogram_densities_integrate_and_class_mean_median_are_distinct\n assert_allclose(sum(p.get_width() * p.get_height() for p in container), 1)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98333333\nE Max relative difference among violations: 0.98333333\nE ACTUAL: array(0.016667)\nE DESIRED: array(1)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____ test_histogram_densities_integrate_and_class_mean_median_are_distinct ____\ntests\\test_dimred_visualizer.py:359: in test_histogram_densities_integrate_and_class_mean_median_are_distinct\n assert_allclose(sum(p.get_width() * p.get_height() for p in container), 1)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98333333\nE Max relative difference among violations: 0.98333333\nE ACTUAL: array(0.016667)\nE DESIRED: array(1)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_histogram_densities_integrate_and_class_mean_median_are_distinct\n1 failed, 65 deselected in 0.97s\n", + "stderr": "" + } + }, + { + "name": "M15_kde_wrong_population", + "method": "plot_latent_kde", + "selection": "real_kde_reproducible", + "changed_lines": [ + 2401 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "91bfc71fabb5fb950157bfc2ac827c4aab3d866ca76c10d44bbf20516aa17911", + "patch": "--- \n+++ \n@@ -2398,7 +2398,7 @@\n from scipy.stats import gaussian_kde\n \n # KDE restreint \u00e0 la population stellaire pour une lecture astrophysique propre.\n- star_mask = y == \"STAR\"\n+ star_mask = np.ones(len(y), dtype=bool)\n Z_stars = Z_ae[star_mask]\n teff_s = (\n meta[\"teff_gspphot\"].values[star_mask].astype(float)\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n1 passed, 65 deselected in 2.32s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:735: in test_real_kde_reproducible_star_selection_and_observation_colors\n assert len(actual) == 119\nE assert 139 == 119\nE + where 139 = len(array([[ 1.46143263e+00, 5.04194549e-01],\\n [-1.58198440e-01, -4.02871589e-01],\\n [-5.12655840e-01, 8.0166....62051618e-01, -1.22073795e+00],\\n [-2.43641605e-01, -8.00208551e-01],\\n [-1.00969481e+00, 6.69136452e-01]]))" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_real_kde_reproducible_star_selection_and_observation_colors _______\ntests\\test_dimred_visualizer.py:735: in test_real_kde_reproducible_star_selection_and_observation_colors\n assert len(actual) == 119\nE assert 139 == 119\nE + where 139 = len(array([[ 1.46143263e+00, 5.04194549e-01],\\n [-1.58198440e-01, -4.02871589e-01],\\n [-5.12655840e-01, 8.0166....62051618e-01, -1.22073795e+00],\\n [-2.43641605e-01, -8.00208551e-01],\\n [-1.00969481e+00, 6.69136452e-01]]))\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_kde_reproducible_star_selection_and_observation_colors\n1 failed, 65 deselected in 2.24s\n", + "stderr": "" + } + }, + { + "name": "M16_export_blank_figure", + "method": "_save", + "selection": "real_export_readable", + "changed_lines": [ + 1018 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "c686947be404c32bf911a0cff410356af8ec385c229db14da4dc8ed8823359f1", + "patch": "--- \n+++ \n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ plt.figure().savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n2 passed, 64 deselected in 1.14s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:688: in test_real_export_readable_and_same_semantic_figure\n assert pixels.shape[0] > 100 and pixels.std() > 1\nE assert (250 > 100 and np.float64(0.0) > 1)\nE + where np.float64(0.0) = ()\nE + where = array([[[255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255],\\n ...,\\n [255, 255, 255],\\n ... ...,\\n [255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255]]], shape=(250, 330, 3), dtype=uint8).std" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F. [100%]\n================================== FAILURES ===================================\n___________ test_real_export_readable_and_same_semantic_figure[png] ___________\ntests\\test_dimred_visualizer.py:688: in test_real_export_readable_and_same_semantic_figure\n assert pixels.shape[0] > 100 and pixels.std() > 1\nE assert (250 > 100 and np.float64(0.0) > 1)\nE + where np.float64(0.0) = ()\nE + where = array([[[255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255],\\n ...,\\n [255, 255, 255],\\n ... ...,\\n [255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255]]], shape=(250, 330, 3), dtype=uint8).std\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_export_readable_and_same_semantic_figure[png]\n1 failed, 1 passed, 64 deselected in 1.04s\n", + "stderr": "" + } + } + ], + "executed_files_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/proofs_dimred_visualizer.py": "2ece4074314b52b26994bb1593e941e6b008e21d70dbc8de7b89d7fd6a3937fd", + "tests/visualizer_review_contracts.py": "79671f840cc76d57ebdc1257b624c8de6078bc5db79023738f7128d3a77b0dec", + "tests/test_visualizer_review_contracts.py": "1d2818457af205945f30ea1774bab0aadcde707a4ded95f3bc92ac0c09e40e9a" + }, + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_disclosure_identifies_the_relevant_exclusion_bound", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_localized_numbers_and_population_suffixes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_variance_claims_use_numbers_and_component_meaning", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[vertical]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[horizontal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_denominators_and_claims_are_distinguishable", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ".................................................................. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-lm2sz5w3\\result.xml -\n66 passed in 19.99s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_r3_frozen_results.json b/audit/m28_r3_frozen_results.json new file mode 100644 index 0000000..ae6d656 --- /dev/null +++ b/audit/m28_r3_frozen_results.json @@ -0,0 +1,35702 @@ +{ + "active_head": "e924f36f24412a435f5ca54a95cdfad914835ff2", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "working_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/proofs_dimred_visualizer.py": "2ece4074314b52b26994bb1593e941e6b008e21d70dbc8de7b89d7fd6a3937fd", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "79671f840cc76d57ebdc1257b624c8de6078bc5db79023738f7128d3a77b0dec", + "tests/test_visualizer_review_contracts.py": "1d2818457af205945f30ea1774bab0aadcde707a4ded95f3bc92ac0c09e40e9a" + }, + "proofs_ref": null, + "runner_lf_sha256": "9a2a2e41e9e87a965f6f345432f619db60c697456d883a3b3a56f6ba4c8540e9", + "runs": [ + { + "name": "C13", + "selection": "kde_labeled_regions", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "29d8c4c1e860508b96cdce82bf78feba2c48b5f74fb65984d9736dc44c8ddfee", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 87 deselected in 15.98s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n5 passed, 87 deselected in 24.86s\n", + "stderr": "" + } + }, + { + "name": "K4", + "selection": "kde_labeled_regions", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,15 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ draws = kde.resample(200000, seed=np.random.default_rng(7))\n+ density = kde.evaluate(draws)\n+ levels = sorted(float(np.quantile(density,1-p)) for p in [.99,.95,.68])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "f5353c35e24c3908f14540eb69100b0026502a508ea8e34823764b12bca1ecb7", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 87 deselected in 16.45s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2442, + 2443, + 2444, + 2445, + 2448, + 2449, + 2450, + 2452, + 2453, + 2454, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2469, + 2470, + 2472, + 2473, + 2475, + 2476, + 2478, + 2480, + 2481, + 2482, + 2483, + 2484, + 2485, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2493, + 2494, + 2495, + 2496, + 2497, + 2498, + 2499, + 2501, + 2502, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2512, + 2518, + 2657, + 2662, + 2663, + 2786, + 2790, + 2848, + 2854, + 2855, + 2968, + 2971 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n5 passed, 87 deselected in 26.50s\n", + "stderr": "" + } + }, + { + "name": "K5", + "selection": "kde_labeled_regions", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,20 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ sigma = np.sqrt(np.diag(kde.covariance))\n+ qx = np.linspace(kde.dataset[0].min()-4*sigma[0],kde.dataset[0].max()+4*sigma[0],500)\n+ qy = np.linspace(kde.dataset[1].min()-4*sigma[1],kde.dataset[1].max()+4*sigma[1],500)\n+ a,b = np.meshgrid(qx,qy)\n+ density = kde(np.vstack([a.ravel(),b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "ae151ba113c3b6bbaf69e6bc068592e34087bd1c03b58c4f5ea8281b75c44d42", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 87 deselected in 15.80s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2442, + 2443, + 2444, + 2445, + 2447, + 2448, + 2449, + 2450, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2461, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2474, + 2475, + 2477, + 2478, + 2480, + 2481, + 2483, + 2485, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2506, + 2507, + 2509, + 2510, + 2511, + 2513, + 2514, + 2515, + 2517, + 2523, + 2662, + 2667, + 2668, + 2791, + 2795, + 2853, + 2859, + 2860, + 2973, + 2976 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n5 passed, 87 deselected in 28.37s\n", + "stderr": "" + } + }, + { + "name": "K1B", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,14 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ peak=float(ZZ.max())\n+ levels=sorted((1-p)*peak for p in [.99,.95,.68])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "c7440409300cf121262065ba00ef3d8ec697b80fd48d35bae00e9d1e10bccafe", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n5 passed, 87 deselected in 24.72s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01325009\nE Max relative difference among violations: 0.01948543\nE ACTUAL: array(0.66675)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.06514077\nE Max relative difference among violations: 0.09579524\nE ACTUAL: array(0.614859)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 95% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00763319\nE Max relative difference among violations: 0.00803493\nE ACTUAL: array(0.957633)\nE DESIRED: array(0.95)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.07977581\nE Max relative difference among violations: 0.11731737\nE ACTUAL: array(0.600224)\nE DESIRED: array(0.68)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2436, + 2437, + 2438, + 2439, + 2441, + 2442, + 2443, + 2444, + 2447, + 2448, + 2449, + 2451, + 2452, + 2453, + 2455, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2466, + 2468, + 2469, + 2471, + 2472, + 2474, + 2475, + 2477, + 2479, + 2480, + 2481, + 2482, + 2483, + 2484, + 2485, + 2486, + 2487, + 2488, + 2489, + 2490, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2498, + 2500, + 2501, + 2503, + 2504, + 2505, + 2507, + 2508, + 2509, + 2511, + 2517, + 2656, + 2661, + 2662, + 2785, + 2789, + 2847, + 2853, + 2854, + 2967, + 2970 + ], + "stdout": "F.FFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01325009\nE Max relative difference among violations: 0.01948543\nE ACTUAL: array(0.66675)\nE DESIRED: array(0.68)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.06514077\nE Max relative difference among violations: 0.09579524\nE ACTUAL: array(0.614859)\nE DESIRED: array(0.68)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 95% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00763319\nE Max relative difference among violations: 0.00803493\nE ACTUAL: array(0.957633)\nE DESIRED: array(0.95)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.07977581\nE Max relative difference among violations: 0.11731737\nE ACTUAL: array(0.600224)\nE DESIRED: array(0.68)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n4 failed, 1 passed, 87 deselected in 17.69s\n", + "stderr": "" + } + }, + { + "name": "K6", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2475 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2485,7 +2476,7 @@\n cs,\n # Labels textuels 99/95/68% align\u00e9s aux niveaux calcul\u00e9s.\n fmt={\n- lv: nm for lv, nm in zip(levels, [\"99%\", \"95%\", \"68%\"][-n_lv:])\n+ lv: nm for lv, nm in zip(levels, [\"68%\", \"95%\", \"99%\"][-n_lv:])\n },\n fontsize=7,\n inline=True,\n", + "candidate_sha256": "0473bb1fd282d2ae32f067cc1cd2885486cf75b9cfc70ccd7fae3dd9aacc0ebf", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n5 passed, 87 deselected in 24.16s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3100187\nE Max relative difference among violations: 0.45590985\nE ACTUAL: array(0.990019)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997108\nE Max relative difference among violations: 0.45583983\nE ACTUAL: array(0.989971)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997656\nE Max relative difference among violations: 0.45584788\nE ACTUAL: array(0.989977)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31000088\nE Max relative difference among violations: 0.45588364\nE ACTUAL: array(0.990001)\nE DESIRED: array(0.68)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31002934\nE Max relative difference among violations: 0.4559255\nE ACTUAL: array(0.990029)\nE DESIRED: array(0.68)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3100187\nE Max relative difference among violations: 0.45590985\nE ACTUAL: array(0.990019)\nE DESIRED: array(0.68)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997108\nE Max relative difference among violations: 0.45583983\nE ACTUAL: array(0.989971)\nE DESIRED: array(0.68)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30997656\nE Max relative difference among violations: 0.45584788\nE ACTUAL: array(0.989977)\nE DESIRED: array(0.68)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31000088\nE Max relative difference among violations: 0.45588364\nE ACTUAL: array(0.990001)\nE DESIRED: array(0.68)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 68% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.31002934\nE Max relative difference among violations: 0.4559255\nE ACTUAL: array(0.990029)\nE DESIRED: array(0.68)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 87 deselected in 22.06s\n", + "stderr": "" + } + }, + { + "name": "K7", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2424 + ], + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ] + ], + "patch": "--- \n+++ \n@@ -2421,33 +2421,24 @@\n # Sous-\u00e9chantillon pour stabiliser le co\u00fbt de la KDE.\n idx = rng.choice(len(Z_stars), N_KDE, replace=False)\n logger.info(\"Calcul KDE sur %d \u00e9toiles...\", N_KDE)\n- kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n+ kde = gaussian_kde(Z_ae.T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "5c14d1ded1f2fe64555f2b2c4a9b034c375610f1fbbad8333c1474264a5a096e", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n5 passed, 87 deselected in 25.42s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000001E7AD66F680>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000001E7ADB09FC0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000001E7ADE9CC80>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "..FFF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000001E7AD66F680>)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000001E7ADB09FC0>)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:106: in test_kde_labeled_regions_enclose_probability_mass\n assert all(\nE AssertionError: KDE fitted on non-STAR observations\nE assert False\nE + where False = all(. at 0x000001E7ADE9CC80>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n3 failed, 2 passed, 87 deselected in 13.40s\n", + "stderr": "" + } + }, + { + "name": "K8", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2465 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2474,7 +2465,7 @@\n cs = ax.contour(\n XX,\n YY,\n- ZZ,\n+ ZZ.T,\n levels=levels,\n colors=[\"#4A4A4A\", \"#2A2A2A\", \"#0A0A0A\"][-n_lv:],\n linewidths=[0.8, 1.2, 1.8][-n_lv:],\n", + "candidate_sha256": "c833f6f75c4e376a04cc2eea5031910643373a69836d06cd20e56e18f97f664b", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n5 passed, 87 deselected in 25.25s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01294495\nE Max relative difference among violations: 0.0130757\nE ACTUAL: array(0.977055)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:173: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0.05, atol=1e-10\nE Contour vertices are not on the fitted STAR iso-density\nE Mismatched elements: 425 / 457 (93%)\nE First 5 mismatches are at indices:\nE [0]: 8.749356970086692e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [1]: 8.648096934890717e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [2]: 8.559249232877267e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [3]: 8.481673619124976e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [4]: 8.414570496859691e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE Max absolute difference among violations: 0.00044197\nE Max relative difference among violations: 1.66420284\nE ACTUAL: array([8.749357e-05, 8.648097e-05, 8.559249e-05, 8.481674e-05,\nE 8.414570e-05, 8.357454e-05, 8.310137e-05, 8.272715e-05,\nE 8.245573e-05, 8.229383e-05, 8.229396e-05, 8.204398e-05,...\nE DESIRED: array(0.000266)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.22685682\nE Max relative difference among violations: 0.2291483\nE ACTUAL: array(0.763143)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3138107\nE Max relative difference among violations: 0.31698051\nE ACTUAL: array(0.676189)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.27101919\nE Max relative difference among violations: 0.27375676\nE ACTUAL: array(0.718981)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01294495\nE Max relative difference among violations: 0.0130757\nE ACTUAL: array(0.977055)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:173: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0.05, atol=1e-10\nE Contour vertices are not on the fitted STAR iso-density\nE Mismatched elements: 425 / 457 (93%)\nE First 5 mismatches are at indices:\nE [0]: 8.749356970086692e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [1]: 8.648096934890717e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [2]: 8.559249232877267e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [3]: 8.481673619124976e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE [4]: 8.414570496859691e-05 (ACTUAL), 0.00026557502922858585 (DESIRED)\nE Max absolute difference among violations: 0.00044197\nE Max relative difference among violations: 1.66420284\nE ACTUAL: array([8.749357e-05, 8.648097e-05, 8.559249e-05, 8.481674e-05,\nE 8.414570e-05, 8.357454e-05, 8.310137e-05, 8.272715e-05,\nE 8.245573e-05, 8.229383e-05, 8.229396e-05, 8.204398e-05,...\nE DESIRED: array(0.000266)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.22685682\nE Max relative difference among violations: 0.2291483\nE ACTUAL: array(0.763143)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3138107\nE Max relative difference among violations: 0.31698051\nE ACTUAL: array(0.676189)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.27101919\nE Max relative difference among violations: 0.27375676\nE ACTUAL: array(0.718981)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 87 deselected in 22.73s\n", + "stderr": "" + } + }, + { + "name": "K9", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2465 + ] + ], + "patch": "--- \n+++ \n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2474,7 +2465,7 @@\n cs = ax.contour(\n XX,\n YY,\n- ZZ,\n+ np.ma.masked_where(XX > 3, ZZ),\n levels=levels,\n colors=[\"#4A4A4A\", \"#2A2A2A\", \"#0A0A0A\"][-n_lv:],\n linewidths=[0.8, 1.2, 1.8][-n_lv:],\n", + "candidate_sha256": "7371291f3dffc0a862a6f8af606664cd85a80726f6d05444494d29a5f3e3c15a", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n5 passed, 87 deselected in 23.75s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.05631876\nE Max relative difference among violations: 0.05688764\nE ACTUAL: array(0.933681)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.06331658\nE Max relative difference among violations: 0.06395614\nE ACTUAL: array(0.926683)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.29256688\nE Max relative difference among violations: 0.2955221\nE ACTUAL: array(0.697433)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30004933\nE Max relative difference among violations: 0.30308013\nE ACTUAL: array(0.689951)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30314268\nE Max relative difference among violations: 0.30620472\nE ACTUAL: array(0.686857)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.05631876\nE Max relative difference among violations: 0.05688764\nE ACTUAL: array(0.933681)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.06331658\nE Max relative difference among violations: 0.06395614\nE ACTUAL: array(0.926683)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.29256688\nE Max relative difference among violations: 0.2955221\nE ACTUAL: array(0.697433)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30004933\nE Max relative difference among violations: 0.30308013\nE ACTUAL: array(0.689951)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:150: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual contour polygons do not enclose their labelled mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.30314268\nE Max relative difference among violations: 0.30620472\nE ACTUAL: array(0.686857)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 87 deselected in 22.09s\n", + "stderr": "" + } + }, + { + "name": "AD05", + "selection": "cluster_colorbar", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1420, + 1421, + 1422 + ], + [ + 1564, + 1565, + 1566 + ] + ], + "patch": "--- \n+++ \n@@ -1417,9 +1417,9 @@\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n- plt.colorbar(\n- sm, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n- ).ax.tick_params(labelsize=8)\n+ ax.legend(handles=[mpatches.Patch(color=color_map[c],label=f\"C{c}\") for c in cluster_ids])\n+ for annotation in list(ax.texts):\n+ annotation.remove()\n ax.text(\n 0.02,\n 0.98,\n@@ -1561,9 +1561,9 @@\n cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n )\n sm2.set_array([])\n- plt.colorbar(\n- sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n- ).ax.tick_params(labelsize=8)\n+ ax.legend(handles=[mpatches.Patch(color=color_map[c],label=f\"C{c}\") for c in cluster_ids])\n+ for annotation in list(ax.texts):\n+ annotation.remove()\n \n ax2 = axes[1]\n valid_teff = np.isfinite(teff)\n", + "candidate_sha256": "6b87a55bafb24be9782e14af82259b4b66f426cb9f4bcf689d5f08adc7fb82bb", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n2 failed, 90 deselected in 1.38s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n2 passed, 90 deselected in 1.18s\n", + "stderr": "" + } + }, + { + "name": "AC05", + "selection": "cluster_colorbar", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1415 + ], + [ + 1560 + ] + ], + "patch": "--- \n+++ \n@@ -1413,7 +1413,7 @@\n ),\n )\n sm = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n@@ -1558,7 +1558,7 @@\n )\n ax.grid(True, alpha=0.2)\n sm2 = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm2.set_array([])\n plt.colorbar(\n", + "candidate_sha256": "0ca8b2a77d45ca5e7e0c55444c021152cb005d5ef896b2725e86fabf00358c95", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n2 failed, 90 deselected in 1.37s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n2 passed, 90 deselected in 1.20s\n", + "stderr": "" + } + }, + { + "name": "FD02", + "selection": "hr_region_vertices", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 3206, + 3207 + ] + ], + "patch": "--- \n+++ \n@@ -3203,7 +3203,8 @@\n ax.invert_xaxis()\n ax.invert_yaxis()\n ax.set_xlim(T_HI + T_PAD * 5, T_LO - T_PAD * 5)\n- ax.set_ylim(G_HI + G_PAD * 5, G_LO - G_PAD * 5)\n+ _ys = [v[1] for r in REGIONS for v in r[\"poly\"]]\n+ ax.set_ylim(max(G_HI+G_PAD*5,max(_ys)),min(G_LO-G_PAD*5,min(_ys)))\n \n ax.xaxis.set_major_formatter(\n FuncFormatter(lambda x, _: f\"{int(x):,}\".replace(\",\", \"\\u202f\"))\n", + "candidate_sha256": "3b7b864ec4aca8ebe8af3fcb887b29c87e31fa8c150f1fa6654320fe9678d13f", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982, + 2995, + 2996, + 2997, + 2999, + 3000, + 3004, + 3005, + 3006, + 3011, + 3012, + 3013, + 3014, + 3016, + 3017, + 3026, + 3027, + 3028, + 3031, + 3034, + 3035, + 3037, + 3038, + 3039, + 3040, + 3041, + 3042, + 3043, + 3044, + 3046, + 3047, + 3048, + 3049, + 3050, + 3052, + 3053, + 3054, + 3055, + 3056, + 3057, + 3058, + 3060, + 3064, + 3065, + 3066, + 3067, + 3068, + 3069, + 3070, + 3071, + 3073, + 3074, + 3075, + 3076, + 3077, + 3078, + 3082, + 3083, + 3084, + 3085, + 3086, + 3087, + 3088, + 3089, + 3091, + 3092, + 3093, + 3094, + 3095, + 3096, + 3097, + 3101, + 3102, + 3103, + 3104, + 3105, + 3106, + 3107, + 3108, + 3110, + 3111, + 3112, + 3113, + 3114, + 3115, + 3116, + 3122, + 3125, + 3138, + 3139, + 3140, + 3141, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3151, + 3152, + 3153, + 3156, + 3157, + 3158, + 3159, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3167, + 3168, + 3169, + 3170, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3184, + 3185, + 3186, + 3187, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3199, + 3200, + 3201, + 3202, + 3204, + 3205, + 3207, + 3208, + 3209, + 3210, + 3212, + 3213, + 3215, + 3216, + 3218, + 3219 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n1 passed, 91 deselected in 0.97s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3207, + 3209, + 3210, + 3212, + 3213, + 3214, + 3215, + 3217, + 3218, + 3220, + 3221, + 3223, + 3224 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 91 deselected in 1.13s\n", + "stderr": "" + } + }, + { + "name": "FD09", + "selection": "more_reconstructions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1179, + 1180 + ] + ], + "patch": "--- \n+++ \n@@ -1176,6 +1176,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in list(axes)[len(idx):]:\n+ unused.plot([],[])\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n", + "candidate_sha256": "4ea4c2c1cbbd94860f59f7598eb65acf8e60297e3c9467d5d4297b41a24cc57c", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1090, + 1164, + 1165, + 1169, + 1171, + 1172, + 1173, + 1175, + 1177, + 1178, + 1179, + 1180, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1195, + 1196, + 1197, + 1200, + 1201, + 1202, + 1203, + 1205, + 1206, + 1207, + 1208, + 1209, + 1211, + 1212, + 1215, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n1 passed, 91 deselected in 0.73s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 1 >= 2\nE + where 1 = len()\nE + where = .lines" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1180, + 1181, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1196, + 1197, + 1198, + 1201, + 1202, + 1203, + 1204, + 1206, + 1207, + 1208, + 1209, + 1210, + 1212, + 1213, + 1216, + 1218, + 1258, + 1263, + 1264, + 1265, + 1317, + 1354, + 1359, + 1473, + 1478, + 1599, + 1602, + 1603, + 1604, + 1641, + 1646, + 1774, + 1779, + 1780, + 1954, + 1958, + 1959, + 2005, + 2009, + 2010, + 2057, + 2064, + 2164, + 2168, + 2216, + 2221, + 2222, + 2223, + 2290, + 2295, + 2392, + 2397, + 2529, + 2535, + 2674, + 2679, + 2680, + 2803, + 2807, + 2865, + 2871, + 2872, + 2985, + 2988 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 1 >= 2\nE + where 1 = len()\nE + where = .lines\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n1 failed, 91 deselected in 0.93s\n", + "stderr": "" + } + }, + { + "name": "FD11", + "selection": "log_histogram_keeps", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2823 + ], + [ + 2834 + ] + ], + "patch": "--- \n+++ \n@@ -2821,7 +2821,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(vals.min()), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n@@ -2832,7 +2832,7 @@\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n ax.hist(\n- vals,\n+ vals[vals>=1e-4] if xscale==\"log\" else vals,\n bins=bins,\n alpha=0.55,\n color=color,\n", + "candidate_sha256": "5930c4566f006317d795d17c7abe043d19c32f3977f5b56b6ed5a0ca90ea9c53", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n1 passed, 91 deselected in 1.25s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:355: in test_log_histogram_keeps_small_positive_errors\n missing, edges = visualizer_contracts.assert_histogram_population(call, errors)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests\\visualizer_review_contracts.py:182: in assert_histogram_population\n assert_array_equal(\nE AssertionError: \nE Arrays are not equal\nE Histogram omitted observations inside its own displayed support\nE Mismatched elements: 3 / 59 (5.08%)\nE Mismatch at indices:\nE [0]: 0 (ACTUAL), 1 (DESIRED)\nE [7]: 0 (ACTUAL), 1 (DESIRED)\nE [14]: 0 (ACTUAL), 1 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 1.\nE ACTUAL: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\nE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\nE 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])\nE DESIRED: array([1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\nE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\nE 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:355: in test_log_histogram_keeps_small_positive_errors\n missing, edges = visualizer_contracts.assert_histogram_population(call, errors)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests\\visualizer_review_contracts.py:182: in assert_histogram_population\n assert_array_equal(\nE AssertionError: \nE Arrays are not equal\nE Histogram omitted observations inside its own displayed support\nE Mismatched elements: 3 / 59 (5.08%)\nE Mismatch at indices:\nE [0]: 0 (ACTUAL), 1 (DESIRED)\nE [7]: 0 (ACTUAL), 1 (DESIRED)\nE [14]: 0 (ACTUAL), 1 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 1.\nE ACTUAL: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\nE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\nE 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])\nE DESIRED: array([1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\nE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\nE 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\n1 failed, 91 deselected in 1.39s\n", + "stderr": "" + } + }, + { + "name": "FD12", + "selection": "fifth_class", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1334, + 1335 + ] + ], + "patch": "--- \n+++ \n@@ -1331,6 +1331,8 @@\n )\n # M\u00e9diane trac\u00e9e pour robuste comparaison inter-classes.\n ax.axvline(np.median(vals), color=color, lw=2, ls=\"--\")\n+ for cls in classes[len(palette):]:\n+ ax.plot([],[],label=f\"{cls} (n={(y==cls).sum()})\")\n ax.set_xlabel(\"MSE de reconstruction\")\n ax.set_ylabel(\"Densit\u00e9\")\n ax.set_title(\"Distribution des erreurs de reconstruction par classe\")\n", + "candidate_sha256": "b37519ab25fa7ab3c9c4c6b3368adfb81196d35d6674894e44ebb03e95c431b8", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "fifth_class", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1316, + 1317, + 1318, + 1319, + 1320, + 1321, + 1323, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1332, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1343, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n1 passed, 91 deselected in 0.93s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "fifth_class", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:379: in test_histogram_does_not_silently_omit_fifth_class\n assert len(calls) == 5, \"Legend-only classes are not histogram populations\"\nE AssertionError: Legend-only classes are not histogram populations\nE assert 4 == 5\nE + where 4 = len([{'ax': . at 0x00000137563D4120>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 N = 43 019\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x0000013798633D80>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 N = 43 019\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x00000137563D4120>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 N = 43 019\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x0000013798633D80>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\n2 failed, 90 deselected in 1.25s\n", + "stderr": "" + } + }, + { + "name": "FD10", + "selection": "truncated_variance_annotation", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 185 + ] + ], + "patch": "--- \n+++ \n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"\u2192 {cumvar[idx]*100:.1f}% avec {n_thresh} PCs\",\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n", + "candidate_sha256": "ab46a5dc5c97949be4f23c049415f85d0382a5329b53ab18a21b04f448ec7484", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "truncated_variance_annotation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n1 passed, 91 deselected in 0.72s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "truncated_variance_annotation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\n1 failed, 91 deselected in 0.88s\n", + "stderr": "" + } + }, + { + "name": "N01", + "selection": "xgboost_classes_confidence", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2076 + ] + ], + "patch": "--- \n+++ \n@@ -2081,7 +2081,7 @@\n alpha=0.55,\n linewidths=0,\n rasterized=True,\n- label=f\"{cls} (n={mask.sum()})\",\n+ label=f\"{classes_pred[(classes_pred.index(cls)+1)%len(classes_pred)]} (n={mask.sum()})\",\n )\n ax.legend(markerscale=4, fontsize=9, framealpha=0.9)\n ax.set_title(\"Pr\u00e9dictions XGBoost\", fontsize=12, fontweight=\"bold\")\n", + "candidate_sha256": "50853fb90afce1cf5e8b4cb4d8fca701b582b3dedb44bb9550aa5c455514ae8f", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2064, + 2067, + 2068, + 2069, + 2071, + 2072, + 2073, + 2075, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2085, + 2086, + 2087, + 2088, + 2089, + 2091, + 2092, + 2094, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2106, + 2107, + 2109, + 2112, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2121, + 2122, + 2124, + 2125, + 2127, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2136, + 2137, + 2139, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2148, + 2149, + 2150, + 2152, + 2153, + 2154, + 2155, + 2157, + 2158, + 2159, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n2 passed, 90 deselected in 0.98s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:511: in test_xgboost_classes_confidence_and_cluster_associations\n assert re.search(\nE AssertionError: Prediction label differs from its actual points\nE assert None\nE + where None = ('\\\\bF\\\\b', 'G (n=3)')\nE + where = .search\nE + and 'G (n=3)' = get_label()\nE + where get_label = .get_label" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:511: in test_xgboost_classes_confidence_and_cluster_associations\n assert re.search(\nE AssertionError: Prediction label differs from its actual points\nE assert None\nE + where None = ('\\\\bF\\\\b', 'G (n=3)')\nE + where = .search\nE + and 'G (n=3)' = get_label()\nE + where get_label = .get_label" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n_______ test_xgboost_classes_confidence_and_cluster_associations[None] ________\ntests\\test_dimred_visualizer.py:511: in test_xgboost_classes_confidence_and_cluster_associations\n assert re.search(\nE AssertionError: Prediction label differs from its actual points\nE assert None\nE + where None = ('\\\\bF\\\\b', 'G (n=3)')\nE + where = .search\nE + and 'G (n=3)' = get_label()\nE + where get_label = .get_label\n____ test_xgboost_classes_confidence_and_cluster_associations[confidence1] ____\ntests\\test_dimred_visualizer.py:511: in test_xgboost_classes_confidence_and_cluster_associations\n assert re.search(\nE AssertionError: Prediction label differs from its actual points\nE assert None\nE + where None = ('\\\\bF\\\\b', 'G (n=3)')\nE + where = .search\nE + and 'G (n=3)' = get_label()\nE + where get_label = .get_label\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_xgboost_classes_confidence_and_cluster_associations[None]\nFAILED tests/test_dimred_visualizer.py::test_xgboost_classes_confidence_and_cluster_associations[confidence1]\n2 failed, 90 deselected in 1.16s\n", + "stderr": "" + } + }, + { + "name": "N02", + "selection": "real_analyzer_state", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1445 + ] + ], + "patch": "--- \n+++ \n@@ -1449,7 +1449,7 @@\n marker=CLASS_MARKERS.get(cls, \"o\"),\n s=2,\n alpha=0.45,\n- label=f\"{cls} (n={mask.sum()})\",\n+ label=f\"{np.unique(y)[(list(np.unique(y)).index(cls)+1)%len(np.unique(y))]} (n={mask.sum()})\",\n rasterized=True,\n linewidths=0,\n )\n", + "candidate_sha256": "88d7e6f3129fd84d22c03d7ab14f92793c96b9580c2ac5937eba0efda98740a3", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1359, + 1360, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1371, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1386, + 1387, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1414, + 1415, + 1417, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1426, + 1427, + 1428, + 1429, + 1430, + 1432, + 1433, + 1434, + 1435, + 1437, + 1440, + 1441, + 1442, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1455, + 1456, + 1457, + 1458, + 1460, + 1461, + 1462, + 1463, + 1464, + 1466, + 1467, + 1468, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n3 passed, 89 deselected in 1.06s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:406: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:406: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:406: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFF [100%]\n================================== FAILURES ===================================\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels0] _______\ntests\\test_dimred_visualizer.py:406: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels1] _______\ntests\\test_dimred_visualizer.py:406: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels2] _______\ntests\\test_dimred_visualizer.py:406: in test_hdbscan_real_analyzer_state_and_point_populations\n assert re.search(\nE AssertionError: Class label differs from plotted population\nE assert None\nE + where None = ('\\\\bGALAXY\\\\b', 'QSO (n=1)')\nE + where = .search\nE + and 'QSO (n=1)' = get_label()\nE + where get_label = .get_label\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels0]\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels1]\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels2]\n3 failed, 89 deselected in 1.32s\n", + "stderr": "" + } + }, + { + "name": "N04", + "selection": "synthesis_preserves", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2966 + ] + ], + "patch": "--- \n+++ \n@@ -2964,7 +2964,7 @@\n ax.set_xlabel(xlabel, fontsize=8)\n if col == 0:\n ax.set_ylabel(\n- f\"{method_name}\\n{ylabel}\", fontsize=9, fontweight=\"bold\"\n+ f\"{METHODS[-1-row][0]}\\n{ylabel}\", fontsize=9, fontweight=\"bold\"\n )\n else:\n ax.set_ylabel(ylabel, fontsize=8)\n", + "candidate_sha256": "582917faca6080dc0e4f1c28c85117c5c52d80e53223745247f2630bdb8eba88", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2869, + 2871, + 2872, + 2873, + 2874, + 2875, + 2877, + 2879, + 2880, + 2882, + 2883, + 2885, + 2891, + 2892, + 2893, + 2894, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2906, + 2907, + 2908, + 2909, + 2911, + 2912, + 2913, + 2914, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2924, + 2926, + 2928, + 2930, + 2931, + 2932, + 2942, + 2943, + 2944, + 2945, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2954, + 2955, + 2956, + 2957, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2966, + 2967, + 2968, + 2970, + 2971, + 2973, + 2974, + 2976, + 2977, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n2 passed, 90 deselected in 0.93s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:664: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert re.search(expected_name, data_axes[row * 3].get_ylabel(), re.I)\nE AssertionError: assert None\nE + where None = ('\\\\bPCA\\\\b', 'Autoencodeur\\nPC2', re.IGNORECASE)\nE + where = .search\nE + and 'Autoencodeur\\nPC2' = get_ylabel()\nE + where get_ylabel = .get_ylabel\nE + and re.IGNORECASE = .I" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:664: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert re.search(expected_name, data_axes[row * 3].get_ylabel(), re.I)\nE AssertionError: assert None\nE + where None = ('\\\\bPCA\\\\b', 'Autoencodeur\\nPC2', re.IGNORECASE)\nE + where = .search\nE + and 'Autoencodeur\\nPC2' = get_ylabel()\nE + where get_ylabel = .get_ylabel\nE + and re.IGNORECASE = .I" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[False] ___\ntests\\test_dimred_visualizer.py:664: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert re.search(expected_name, data_axes[row * 3].get_ylabel(), re.I)\nE AssertionError: assert None\nE + where None = ('\\\\bPCA\\\\b', 'Autoencodeur\\nPC2', re.IGNORECASE)\nE + where = .search\nE + and 'Autoencodeur\\nPC2' = get_ylabel()\nE + where get_ylabel = .get_ylabel\nE + and re.IGNORECASE = .I\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[True] ____\ntests\\test_dimred_visualizer.py:664: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert re.search(expected_name, data_axes[row * 3].get_ylabel(), re.I)\nE AssertionError: assert None\nE + where None = ('\\\\bPCA\\\\b', 'Autoencodeur\\nPC2', re.IGNORECASE)\nE + where = .search\nE + and 'Autoencodeur\\nPC2' = get_ylabel()\nE + where get_ylabel = .get_ylabel\nE + and re.IGNORECASE = .I\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]\n2 failed, 90 deselected in 1.10s\n", + "stderr": "" + } + }, + { + "name": "N10", + "selection": "real_sklearn_trustworthiness", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2236 + ] + ], + "patch": "--- \n+++ \n@@ -2233,7 +2233,7 @@\n idx = rng.choice(len(X_ref), size=n, replace=False)\n X_sub = X_ref[idx]\n Zu_sub = Z_umap[idx]\n- Zt_sub = Z_tsne[idx]\n+ Zt_sub = Z_tsne[np.roll(idx,1)]\n \n trust_u, trust_t = [], []\n for k in k_values:\n", + "candidate_sha256": "9a92851045aa8e4839b1923d4d613d9f6a4c578cca63944ccfd78d6874c17396", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2223, + 2224, + 2226, + 2229, + 2230, + 2232, + 2233, + 2234, + 2235, + 2237, + 2238, + 2240, + 2241, + 2242, + 2243, + 2245, + 2246, + 2247, + 2249, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2259, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2268, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2278, + 2279, + 2280, + 2281, + 2282, + 2283, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n2 passed, 90 deselected in 2.66s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:594: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 24 / 24 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -0.13429338949088465 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 1.1776172821553483 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: 0.7540394717615756 (ACTUAL), -0.6451940968015629 (DESIRED)\nE [1, 1]: 1.9947886386434426 (ACTUAL), 0.0825255266666682 (DESIRED)\nE [2, 0]: -0.6451940968015629 (ACTUAL), -0.11873997633083841 (DESIRED)\nE Max absolute difference among violations: 3.0315093\nE Max relative difference among violations: 23.17177714\nE ACTUAL: array([[-0.134293, 1.177617],\nE [ 0.754039, 1.994789],\nE [-0.645194, 0.082526],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-0.645194, 0.082526],\nE [-0.11874 , -1.400206],..." + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:594: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 18 / 18 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: 0.21879687040848914 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: -1.1148814736874748 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: 0.7540394717615756 (ACTUAL), -1.0861640144823521 (DESIRED)\nE [1, 1]: 1.9947886386434426 (ACTUAL), -0.5693158913378338 (DESIRED)\nE [2, 0]: -1.0861640144823521 (ACTUAL), -1.215555026777933 (DESIRED)\nE Max absolute difference among violations: 3.10967011\nE Max relative difference among violations: 6.97417863\nE ACTUAL: array([[ 0.218797, -1.114881],\nE [ 0.754039, 1.994789],\nE [-1.086164, -0.569316],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-1.086164, -0.569316],\nE [-1.215555, 0.138822],..." + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[12] ________\ntests\\test_dimred_visualizer.py:594: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 24 / 24 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -0.13429338949088465 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 1.1776172821553483 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: 0.7540394717615756 (ACTUAL), -0.6451940968015629 (DESIRED)\nE [1, 1]: 1.9947886386434426 (ACTUAL), 0.0825255266666682 (DESIRED)\nE [2, 0]: -0.6451940968015629 (ACTUAL), -0.11873997633083841 (DESIRED)\nE Max absolute difference among violations: 3.0315093\nE Max relative difference among violations: 23.17177714\nE ACTUAL: array([[-0.134293, 1.177617],\nE [ 0.754039, 1.994789],\nE [-0.645194, 0.082526],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-0.645194, 0.082526],\nE [-0.11874 , -1.400206],...\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[9] _________\ntests\\test_dimred_visualizer.py:594: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 18 / 18 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: 0.21879687040848914 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: -1.1148814736874748 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: 0.7540394717615756 (ACTUAL), -1.0861640144823521 (DESIRED)\nE [1, 1]: 1.9947886386434426 (ACTUAL), -0.5693158913378338 (DESIRED)\nE [2, 0]: -1.0861640144823521 (ACTUAL), -1.215555026777933 (DESIRED)\nE Max absolute difference among violations: 3.10967011\nE Max relative difference among violations: 6.97417863\nE ACTUAL: array([[ 0.218797, -1.114881],\nE [ 0.754039, 1.994789],\nE [-1.086164, -0.569316],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-1.086164, -0.569316],\nE [-1.215555, 0.138822],...\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[12]\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[9]\n2 failed, 90 deselected in 2.98s\n", + "stderr": "" + } + }, + { + "name": "N05", + "selection": "interpolation_actual", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1278, + 1279 + ] + ], + "patch": "--- \n+++ \n@@ -1275,8 +1275,8 @@\n ax.plot(\n Z_interp[:, 0], Z_interp[:, 1], color=\"gray\", lw=1.5, zorder=2, alpha=0.6\n )\n- ax.scatter(*Z_interp[0], s=120, c=\"blue\", zorder=4, marker=\"*\", label=label_a)\n- ax.scatter(*Z_interp[-1], s=120, c=\"red\", zorder=4, marker=\"*\", label=label_b)\n+ ax.scatter(*Z_interp[0], s=120, c=\"blue\", zorder=4, marker=\"*\", label=(label_b))\n+ ax.scatter(*Z_interp[-1], s=120, c=\"red\", zorder=4, marker=\"*\", label=label_a)\n plt.colorbar(sc, ax=ax, label=\"\u03b1 (interpolation)\")\n ax.set_xlabel(\"Latent axe 1\")\n ax.set_ylabel(\"Latent axe 2\")\n", + "candidate_sha256": "13917cb73aeae55c591400ff03d4efccc14cb00db98ff3d27b4b51dcae35f4b0", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "interpolation_actual", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1266, + 1267, + 1268, + 1269, + 1271, + 1272, + 1274, + 1275, + 1277, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1285, + 1287, + 1288, + 1289, + 1291, + 1292, + 1293, + 1294, + 1295, + 1296, + 1298, + 1299, + 1300, + 1302, + 1303, + 1304, + 1305, + 1306, + 1308, + 1309, + 1312, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n1 passed, 91 deselected in 0.76s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "interpolation_actual", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:293: in test_interpolation_actual_path_feature_order_and_endpoints\n assert axes[0].collections[1].get_label() == \"A\"\nE AssertionError: assert 'B' == 'A'\nE \nE - A\nE + B" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_________ test_interpolation_actual_path_feature_order_and_endpoints __________\ntests\\test_dimred_visualizer.py:293: in test_interpolation_actual_path_feature_order_and_endpoints\n assert axes[0].collections[1].get_label() == \"A\"\nE AssertionError: assert 'B' == 'A'\nE \nE - A\nE + B\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_interpolation_actual_path_feature_order_and_endpoints\n1 failed, 91 deselected in 0.91s\n", + "stderr": "" + } + }, + { + "name": "N06", + "selection": "family_weights_bar", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 369 + ], + [ + 379 + ] + ], + "patch": "--- \n+++ \n@@ -374,7 +374,7 @@\n alpha=0.92,\n edgecolor=\"white\",\n linewidth=0.5,\n- label=\"PC1\",\n+ label=(\"PC2\"),\n )\n ax.bar(\n x + w / 2,\n@@ -384,7 +384,7 @@\n alpha=0.55,\n edgecolor=\"white\",\n linewidth=0.5,\n- label=\"PC2\",\n+ label=\"PC1\",\n hatch=\"//\",\n )\n # Lecture visuelle: opaque = PC1, hachur\u00e9/translucide = PC2.\n", + "candidate_sha256": "aab9151c32a9184032f1d5cb8092e7e951262c5c208f6af603017ab2a386df19", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "family_weights_bar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n1 passed, 91 deselected in 0.73s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "family_weights_bar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:176: in test_family_weights_bar_and_donut_angles\n assert_allclose([p.get_height() for p in series[\"PC1\"]], [80, 20, 0])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.0 (ACTUAL), 80 (DESIRED)\nE [1]: 30.0 (ACTUAL), 20 (DESIRED)\nE [2]: 70.0 (ACTUAL), 0 (DESIRED)\nE Max absolute difference among violations: 80.\nE Max relative difference among violations: 1.\nE ACTUAL: array([ 0., 30., 70.])\nE DESIRED: array([80, 20, 0])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n__________________ test_family_weights_bar_and_donut_angles ___________________\ntests\\test_dimred_visualizer.py:176: in test_family_weights_bar_and_donut_angles\n assert_allclose([p.get_height() for p in series[\"PC1\"]], [80, 20, 0])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.0 (ACTUAL), 80 (DESIRED)\nE [1]: 30.0 (ACTUAL), 20 (DESIRED)\nE [2]: 70.0 (ACTUAL), 0 (DESIRED)\nE Max absolute difference among violations: 80.\nE Max relative difference among violations: 1.\nE ACTUAL: array([ 0., 30., 70.])\nE DESIRED: array([80, 20, 0])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_family_weights_bar_and_donut_angles\n1 failed, 91 deselected in 0.81s\n", + "stderr": "" + } + }, + { + "name": "N03", + "selection": "real_export_readable", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024 + ] + ], + "patch": "--- \n+++ \n@@ -1015,7 +1015,13 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ import pickle\n+ clone=pickle.loads(pickle.dumps(fig))\n+ for axis in clone.axes:\n+ for collection in list(axis.collections):\n+ collection.remove()\n+ clone.savefig(path,bbox_inches=\"tight\",dpi=self.dpi)\n+ plt.close(clone)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n", + "candidate_sha256": "fc72e8f8514911cc968fd57dee9b6fb78846d55c43c6ac4763aa2c96a77b1421", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n2 passed, 90 deselected in 1.15s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:689: in test_real_export_readable_and_same_semantic_figure\n visualizer_contracts.assert_png_matches_figure(path, fig, c.viz.dpi)\ntests\\visualizer_review_contracts.py:97: in assert_png_matches_figure\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=1\nE Exported scientific artists differ from the returned figure\nE Mismatched elements: 162 / 312700 (0.0518%)\nE First 5 mismatches are at indices:\nE [28, 127, 0]: 255 (ACTUAL), 250 (DESIRED)\nE [28, 127, 1]: 255 (ACTUAL), 251 (DESIRED)\nE [28, 127, 2]: 255 (ACTUAL), 252 (DESIRED)\nE [28, 128, 0]: 255 (ACTUAL), 214 (DESIRED)\nE [28, 128, 1]: 255 (ACTUAL), 223 (DESIRED)\nE Max absolute difference among violations: 125\nE Max relative difference among violations: 0.96153846\nE ACTUAL: array([[[255, 255, 255, 255],\nE [255, 255, 255, 255],\nE [255, 255, 255, 255],...\nE DESIRED: array([[[255, 255, 255, 255],\nE [255, 255, 255, 255],\nE [255, 255, 255, 255],..." + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024, + 1025, + 1031, + 1098, + 1171, + 1172, + 1222, + 1262, + 1267, + 1268, + 1269, + 1321, + 1358, + 1363, + 1477, + 1482, + 1603, + 1606, + 1607, + 1608, + 1645, + 1650, + 1778, + 1783, + 1784, + 1958, + 1962, + 1963, + 2009, + 2013, + 2014, + 2061, + 2068, + 2168, + 2172, + 2220, + 2225, + 2226, + 2227, + 2294, + 2299, + 2396, + 2401, + 2533, + 2539, + 2678, + 2683, + 2684, + 2807, + 2811, + 2869, + 2875, + 2876, + 2989, + 2992 + ], + "stdout": "F. [100%]\n================================== FAILURES ===================================\n___________ test_real_export_readable_and_same_semantic_figure[png] ___________\ntests\\test_dimred_visualizer.py:689: in test_real_export_readable_and_same_semantic_figure\n visualizer_contracts.assert_png_matches_figure(path, fig, c.viz.dpi)\ntests\\visualizer_review_contracts.py:97: in assert_png_matches_figure\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=1\nE Exported scientific artists differ from the returned figure\nE Mismatched elements: 162 / 312700 (0.0518%)\nE First 5 mismatches are at indices:\nE [28, 127, 0]: 255 (ACTUAL), 250 (DESIRED)\nE [28, 127, 1]: 255 (ACTUAL), 251 (DESIRED)\nE [28, 127, 2]: 255 (ACTUAL), 252 (DESIRED)\nE [28, 128, 0]: 255 (ACTUAL), 214 (DESIRED)\nE [28, 128, 1]: 255 (ACTUAL), 223 (DESIRED)\nE Max absolute difference among violations: 125\nE Max relative difference among violations: 0.96153846\nE ACTUAL: array([[[255, 255, 255, 255],\nE [255, 255, 255, 255],\nE [255, 255, 255, 255],...\nE DESIRED: array([[[255, 255, 255, 255],\nE [255, 255, 255, 255],\nE [255, 255, 255, 255],...\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_export_readable_and_same_semantic_figure[png]\n1 failed, 1 passed, 90 deselected in 1.32s\n", + "stderr": "" + } + }, + { + "name": "A_TRUST", + "selection": "real_sklearn_trustworthiness", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2233 + ] + ], + "patch": "--- \n+++ \n@@ -2230,7 +2230,7 @@\n rng = np.random.default_rng(42)\n n = min(n_subsample, len(X_ref))\n # Sous-\u00e9chantillonnage pour ma\u00eetriser le co\u00fbt de calcul T(k).\n- idx = rng.choice(len(X_ref), size=n, replace=False)\n+ idx = np.sort(rng.permutation(len(X_ref))[:n])\n X_sub = X_ref[idx]\n Zu_sub = Z_umap[idx]\n Zt_sub = Z_tsne[idx]\n", + "candidate_sha256": "fcc67a8362f6f40330e5d109e8e0851d1fe3ef3870d3986f40d225d1bf91f9c2", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n2 passed, 90 deselected in 2.70s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n2 passed, 90 deselected in 2.62s\n", + "stderr": "" + } + }, + { + "name": "AD14", + "selection": "trustworthiness_axis_contains", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2279, + 2280 + ] + ], + "patch": "--- \n+++ \n@@ -2276,7 +2276,8 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0.75,1.01)\n+ ax.text(.1,.1,f\"T(k) < 0.75 hors champ : min = {min(trust_t):.3f}\",transform=ax.transAxes)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n", + "candidate_sha256": "b226e92e6afab749ae6ab91b70733b47ccaf8995f634945d03935428180aa4ba", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:342: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:342: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\n1 failed, 91 deselected in 2.65s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2285, + 2289, + 2294, + 2391, + 2396, + 2528, + 2534, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n1 passed, 91 deselected in 2.32s\n", + "stderr": "" + } + }, + { + "name": "A_EXPORT", + "selection": "default_output_directory or real_export_readable", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1087 + ], + [ + 1249 + ] + ], + "patch": "--- \n+++ \n@@ -1084,9 +1084,7 @@\n \"Autoencodeur \u2014 Historique d'entra\u00eenement (LAMOST DR5)\", fontsize=13, y=1.02\n )\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_training_history\")\n return fig, axes\n \n def plot_ae_embedding(self, Z, meta, y, save_path=None):\n@@ -1248,9 +1246,7 @@\n ax.legend(fontsize=9)\n ax.grid(True, alpha=0.3)\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_ae_vs_pca\")\n return fig, ax\n \n def plot_latent_interpolation(\n", + "candidate_sha256": "03cd6fc36c4863b2d546a7b7a0986741434046b13d54c198a9eca3cf45e23b75", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_output_directory or real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1551/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1551/test_default_output_directory_1').glob" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1165, + 1166, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "..FF [100%]\n================================== FAILURES ===================================\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1551/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1551/test_default_output_directory_1').glob\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\n2 failed, 2 passed, 88 deselected in 1.77s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_output_directory or real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1010, + 1012, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1088, + 1090, + 1163, + 1164, + 1214, + 1216, + 1218, + 1219, + 1221, + 1222, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1231, + 1233, + 1234, + 1236, + 1238, + 1239, + 1240, + 1241, + 1243, + 1244, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1252, + 1257, + 1258, + 1259, + 1311, + 1348, + 1353, + 1467, + 1472, + 1593, + 1596, + 1597, + 1598, + 1635, + 1640, + 1768, + 1773, + 1774, + 1948, + 1952, + 1953, + 1999, + 2003, + 2004, + 2051, + 2058, + 2158, + 2162, + 2210, + 2215, + 2216, + 2217, + 2284, + 2289, + 2386, + 2391, + 2523, + 2529, + 2668, + 2673, + 2674, + 2797, + 2801, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n4 passed, 88 deselected in 2.31s\n", + "stderr": "" + } + }, + { + "name": "A_METHODS", + "selection": "synthesis_preserves", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2887 + ] + ], + "patch": "--- \n+++ \n@@ -2884,7 +2884,7 @@\n if Z_umap is not None:\n # UMAP est optionnel selon le notebook ex\u00e9cut\u00e9.\n METHODS.append((\"UMAP\", Z_umap, \"UMAP 1\", \"UMAP 2\"))\n- METHODS.append((\"Autoencodeur\", Z_ae, \"Latent 1\", \"Latent 2\"))\n+ METHODS.append((\"AE\", Z_ae, \"Latent 1\", \"Latent 2\"))\n \n PARAMS = [\n (\"Classe spectrale\", None, None),\n", + "candidate_sha256": "c262ecf582497b62b25e0ba2a89eb1c64108a95e763215442d6b610a19acc030", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n2 passed, 90 deselected in 0.91s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n2 passed, 90 deselected in 0.95s\n", + "stderr": "" + } + }, + { + "name": "A_HIST", + "selection": "linear_histogram_truncation", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2833 + ] + ], + "patch": "--- \n+++ \n@@ -2830,7 +2830,7 @@\n if np.any(y == \"STAR\")\n else vals.max()\n )\n- bins = np.linspace(0, star_p99 * 1.5, 60)\n+ bins = np.linspace(0, float(np.max(mse_per_sample)), 60)\n ax.hist(\n vals,\n bins=bins,\n", + "candidate_sha256": "c4089757fef756a2e5f871e344afcfaba96057c66a8c6516a744d75ae4ed022a", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:249: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:249: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n1 failed, 91 deselected in 1.39s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n1 passed, 91 deselected in 1.26s\n", + "stderr": "" + } + }, + { + "name": "AD_HIST", + "selection": "linear_histogram_truncation", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2834, + 2835, + 2836 + ] + ], + "patch": "--- \n+++ \n@@ -2831,6 +2831,9 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls}: excluded {missing} of {len(vals)} outside support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n", + "candidate_sha256": "dd837b5041209b36dbb2ea5dbd14f3fa8c002cde560a5fe1472b6db67f1b5578", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:249: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:249: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n1 failed, 91 deselected in 1.38s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2846, + 2847, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2858, + 2859, + 2860, + 2862, + 2863, + 2864, + 2866, + 2872, + 2873, + 2986, + 2989 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n1 passed, 91 deselected in 1.28s\n", + "stderr": "" + } + }, + { + "name": "AD_LOG", + "selection": "log_histogram_keeps", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2834, + 2835, + 2836 + ] + ], + "patch": "--- \n+++ \n@@ -2831,6 +2831,9 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls}: excluded {missing} of {len(vals)} outside support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n", + "candidate_sha256": "dd837b5041209b36dbb2ea5dbd14f3fa8c002cde560a5fe1472b6db67f1b5578", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\n1 failed, 91 deselected in 1.29s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2846, + 2847, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2858, + 2859, + 2860, + 2862, + 2863, + 2864, + 2866, + 2872, + 2873, + 2986, + 2989 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n1 passed, 91 deselected in 1.18s\n", + "stderr": "" + } + }, + { + "name": "K10", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2424 + ], + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ] + ], + "patch": "--- \n+++ \n@@ -2421,33 +2421,24 @@\n # Sous-\u00e9chantillon pour stabiliser le co\u00fbt de la KDE.\n idx = rng.choice(len(Z_stars), N_KDE, replace=False)\n logger.info(\"Calcul KDE sur %d \u00e9toiles...\", N_KDE)\n- kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n+ kde = gaussian_kde(Z_stars[idx][Z_stars[idx][:,0]<3].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "8ab9d01ffd73e4273dcf25acede88db6e3794d8fc8d5d963519cd0a77c449768", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n5 passed, 87 deselected in 23.70s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.1\nE Fitted STAR sample excludes or overrepresents a stellar mode\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3\nE Max relative difference among violations: 1.\nE ACTUAL: array(0.)\nE DESIRED: array(0.3)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.1\nE Fitted STAR sample excludes or overrepresents a stellar mode\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3\nE Max relative difference among violations: 1.\nE ACTUAL: array(0.)\nE DESIRED: array(0.3)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.1\nE Fitted STAR sample excludes or overrepresents a stellar mode\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3\nE Max relative difference among violations: 1.\nE ACTUAL: array(0.)\nE DESIRED: array(0.3)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "..FFF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.1\nE Fitted STAR sample excludes or overrepresents a stellar mode\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3\nE Max relative difference among violations: 1.\nE ACTUAL: array(0.)\nE DESIRED: array(0.3)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.1\nE Fitted STAR sample excludes or overrepresents a stellar mode\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3\nE Max relative difference among violations: 1.\nE ACTUAL: array(0.)\nE DESIRED: array(0.3)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.1\nE Fitted STAR sample excludes or overrepresents a stellar mode\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3\nE Max relative difference among violations: 1.\nE ACTUAL: array(0.)\nE DESIRED: array(0.3)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n3 failed, 2 passed, 87 deselected in 9.19s\n", + "stderr": "" + } + }, + { + "name": "K11", + "selection": "kde_labeled_regions", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2424 + ], + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ] + ], + "patch": "--- \n+++ \n@@ -2421,33 +2421,24 @@\n # Sous-\u00e9chantillon pour stabiliser le co\u00fbt de la KDE.\n idx = rng.choice(len(Z_stars), N_KDE, replace=False)\n logger.info(\"Calcul KDE sur %d \u00e9toiles...\", N_KDE)\n- kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n+ kde = gaussian_kde(Z_stars[idx[:max(3,len(idx)//2)]].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "15a1ba5506bf85d608c2a94bf4851e67480ea9d02c0eb08d946314914e699807", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 87 deselected in 15.48s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n5 passed, 87 deselected in 14.49s\n", + "stderr": "" + } + }, + { + "name": "FD05", + "selection": "cluster_colorbar", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1420 + ], + [ + 1564 + ] + ], + "patch": "--- \n+++ \n@@ -1418,7 +1418,7 @@\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n plt.colorbar(\n- sm, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n+ sm, ax=ax, fraction=0.035, pad=0.02, label=\"Groupe HDBSCAN\"\n ).ax.tick_params(labelsize=8)\n ax.text(\n 0.02,\n@@ -1562,7 +1562,7 @@\n )\n sm2.set_array([])\n plt.colorbar(\n- sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n+ sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Groupe HDBSCAN\"\n ).ax.tick_params(labelsize=8)\n \n ax2 = axes[1]\n", + "candidate_sha256": "d6a22497392a50245afff60a54ddb64d4005e114f758f93034a1139964fa13c6", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1359, + 1360, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1371, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1386, + 1387, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1414, + 1415, + 1417, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1426, + 1427, + 1428, + 1429, + 1430, + 1432, + 1433, + 1434, + 1435, + 1437, + 1440, + 1441, + 1442, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1455, + 1456, + 1457, + 1458, + 1460, + 1461, + 1462, + 1463, + 1464, + 1466, + 1467, + 1468, + 1470, + 1475, + 1478, + 1481, + 1482, + 1483, + 1484, + 1485, + 1487, + 1488, + 1493, + 1494, + 1495, + 1498, + 1499, + 1501, + 1502, + 1504, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1516, + 1517, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1529, + 1530, + 1531, + 1532, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1558, + 1559, + 1560, + 1562, + 1563, + 1564, + 1565, + 1567, + 1568, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1582, + 1583, + 1584, + 1585, + 1587, + 1588, + 1589, + 1590, + 1592, + 1593, + 1594, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n2 passed, 90 deselected in 1.18s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n2 failed, 90 deselected in 1.38s\n", + "stderr": "" + } + }, + { + "name": "FD05_H", + "selection": "cluster_colorbar", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1420 + ], + [ + 1564 + ] + ], + "patch": "--- \n+++ \n@@ -1418,7 +1418,7 @@\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n plt.colorbar(\n- sm, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n+ sm, ax=ax, fraction=0.035, pad=0.02, label=\"Groupe HDBSCAN\", orientation=\"horizontal\"\n ).ax.tick_params(labelsize=8)\n ax.text(\n 0.02,\n@@ -1562,7 +1562,7 @@\n )\n sm2.set_array([])\n plt.colorbar(\n- sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n+ sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Groupe HDBSCAN\", orientation=\"horizontal\"\n ).ax.tick_params(labelsize=8)\n \n ax2 = axes[1]\n", + "candidate_sha256": "4138261e0a35f2c1d648592aa07055eea7ccbde18759ff55ee11c374b028b92e", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1359, + 1360, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1371, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1386, + 1387, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1414, + 1415, + 1417, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1426, + 1427, + 1428, + 1429, + 1430, + 1432, + 1433, + 1434, + 1435, + 1437, + 1440, + 1441, + 1442, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1455, + 1456, + 1457, + 1458, + 1460, + 1461, + 1462, + 1463, + 1464, + 1466, + 1467, + 1468, + 1470, + 1475, + 1478, + 1481, + 1482, + 1483, + 1484, + 1485, + 1487, + 1488, + 1493, + 1494, + 1495, + 1498, + 1499, + 1501, + 1502, + 1504, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1516, + 1517, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1529, + 1530, + 1531, + 1532, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1558, + 1559, + 1560, + 1562, + 1563, + 1564, + 1565, + 1567, + 1568, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1582, + 1583, + 1584, + 1585, + 1587, + 1588, + 1589, + 1590, + 1592, + 1593, + 1594, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n2 passed, 90 deselected in 1.19s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n2 failed, 90 deselected in 1.38s\n", + "stderr": "" + } + }, + { + "name": "AC05_H", + "selection": "cluster_colorbar", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1415 + ], + [ + 1420 + ], + [ + 1560 + ], + [ + 1564 + ] + ], + "patch": "--- \n+++ \n@@ -1413,12 +1413,12 @@\n ),\n )\n sm = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n plt.colorbar(\n- sm, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n+ sm, ax=ax, fraction=0.035, pad=0.02, label=\"Groupe HDBSCAN\", orientation=\"horizontal\"\n ).ax.tick_params(labelsize=8)\n ax.text(\n 0.02,\n@@ -1558,11 +1558,11 @@\n )\n ax.grid(True, alpha=0.2)\n sm2 = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm2.set_array([])\n plt.colorbar(\n- sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n+ sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Groupe HDBSCAN\", orientation=\"horizontal\"\n ).ax.tick_params(labelsize=8)\n \n ax2 = axes[1]\n", + "candidate_sha256": "8a4e7935b811a1274c0ab9191ab3686e67d1abe234347469c7ad629f4f798f03", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n2 failed, 90 deselected in 1.38s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n2 passed, 90 deselected in 1.19s\n", + "stderr": "" + } + }, + { + "name": "AD05_ANN", + "selection": "cluster_colorbar", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1420 + ], + [ + 1530 + ], + [ + 1562 + ] + ], + "patch": "--- \n+++ \n@@ -1417,9 +1417,7 @@\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n- plt.colorbar(\n- sm, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n- ).ax.tick_params(labelsize=8)\n+ pass # Categorical annotations remain authoritative.\n ax.text(\n 0.02,\n 0.98,\n@@ -1529,7 +1527,7 @@\n )\n for cid in top8:\n m = (cl == cid) & valid_hr\n- if m.sum() < 20:\n+ if m.sum() < 1:\n continue\n # \u00c9tiquette des clusters dominants au barycentre m\u00e9dian.\n mt, mg = np.median(teff[m]), np.median(logg[m])\n@@ -1561,9 +1559,7 @@\n cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n )\n sm2.set_array([])\n- plt.colorbar(\n- sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n- ).ax.tick_params(labelsize=8)\n+ pass # Categorical annotations remain authoritative.\n \n ax2 = axes[1]\n valid_teff = np.isfinite(teff)\n", + "candidate_sha256": "dd5e34c296771518e71ea5ffaeee22d2b266314f0e8e951af13d788c0529361c", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n2 failed, 90 deselected in 1.38s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1425, + 1426, + 1427, + 1428, + 1429, + 1431, + 1432, + 1433, + 1434, + 1436, + 1439, + 1440, + 1441, + 1443, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1454, + 1455, + 1456, + 1457, + 1459, + 1460, + 1461, + 1462, + 1463, + 1465, + 1466, + 1467, + 1469, + 1474, + 1477, + 1480, + 1481, + 1482, + 1483, + 1484, + 1486, + 1487, + 1492, + 1493, + 1494, + 1497, + 1498, + 1500, + 1501, + 1503, + 1505, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1515, + 1516, + 1518, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1528, + 1529, + 1530, + 1533, + 1534, + 1535, + 1536, + 1537, + 1538, + 1539, + 1540, + 1541, + 1542, + 1543, + 1544, + 1546, + 1548, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1557, + 1558, + 1559, + 1561, + 1562, + 1564, + 1565, + 1567, + 1568, + 1569, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1579, + 1580, + 1581, + 1582, + 1584, + 1585, + 1586, + 1587, + 1589, + 1590, + 1591, + 1593, + 1596, + 1597, + 1598, + 1635, + 1640, + 1768, + 1773, + 1774, + 1948, + 1952, + 1953, + 1999, + 2003, + 2004, + 2051, + 2058, + 2158, + 2162, + 2210, + 2215, + 2216, + 2217, + 2284, + 2289, + 2386, + 2391, + 2523, + 2529, + 2668, + 2673, + 2674, + 2797, + 2801, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n2 passed, 90 deselected in 1.15s\n", + "stderr": "" + } + }, + { + "name": "FD03_K", + "selection": "hr_population_title", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 3213 + ] + ], + "patch": "--- \n+++ \n@@ -3212,7 +3212,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 \u2248 43k \u00e9toiles\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "candidate_sha256": "8fa2822212ead8f9d2aa3c7510bf5b7d62d7e3c49a7fc304f69c055eda286121", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982, + 2995, + 2996, + 2997, + 2999, + 3000, + 3004, + 3005, + 3006, + 3011, + 3012, + 3013, + 3014, + 3016, + 3017, + 3026, + 3027, + 3028, + 3031, + 3034, + 3035, + 3037, + 3038, + 3039, + 3040, + 3041, + 3042, + 3043, + 3044, + 3046, + 3047, + 3048, + 3049, + 3050, + 3052, + 3053, + 3054, + 3055, + 3056, + 3057, + 3058, + 3060, + 3064, + 3065, + 3066, + 3067, + 3068, + 3069, + 3070, + 3071, + 3073, + 3074, + 3075, + 3076, + 3077, + 3078, + 3082, + 3083, + 3084, + 3085, + 3086, + 3087, + 3088, + 3089, + 3091, + 3092, + 3093, + 3094, + 3095, + 3096, + 3097, + 3101, + 3102, + 3103, + 3104, + 3105, + 3106, + 3107, + 3108, + 3110, + 3111, + 3112, + 3113, + 3114, + 3115, + 3116, + 3122, + 3125, + 3138, + 3139, + 3140, + 3141, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3151, + 3152, + 3153, + 3156, + 3157, + 3158, + 3159, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3167, + 3168, + 3169, + 3170, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3184, + 3185, + 3186, + 3187, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3199, + 3200, + 3201, + 3202, + 3204, + 3205, + 3207, + 3208, + 3209, + 3210, + 3212, + 3213, + 3215, + 3216, + 3218, + 3219 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n2 passed, 90 deselected in 1.12s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 \u2248 43k \u00e9toiles\nE assert (not [43000.0] or False)\nE + where False = all(. at 0x0000023194CDC120>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 \u2248 43k \u00e9toiles\nE assert (not [43000.0] or False)\nE + where False = all(. at 0x00000231D6F53300>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 \u2248 43k \u00e9toiles\nE assert (not [43000.0] or False)\nE + where False = all(. at 0x0000023194CDC120>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 \u2248 43k \u00e9toiles\nE assert (not [43000.0] or False)\nE + where False = all(. at 0x00000231D6F53300>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\n2 failed, 90 deselected in 1.25s\n", + "stderr": "" + } + }, + { + "name": "FVAR_COMPONENT", + "selection": "truncated_variance_annotation", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 185 + ] + ], + "patch": "--- \n+++ \n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"{n_thresh} composantes \u2192 {cumvar[idx]*100:.1f} %\".replace(\".\",\",\"),\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n", + "candidate_sha256": "1e19e91a846687321cc9a69bc5b6b94eb025b970daa6b3bd993c81c662bd8d88", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "truncated_variance_annotation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n1 passed, 91 deselected in 0.74s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "truncated_variance_annotation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\n1 failed, 91 deselected in 0.88s\n", + "stderr": "" + } + }, + { + "name": "A_VARIANCE", + "selection": "truncated_variance_annotation or real_pca_variance", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 185 + ] + ], + "patch": "--- \n+++ \n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"{n_thresh} composantes \u2192 {pca_analyzer.explained_variance_ratio[:n_thresh].sum()*100:.1f} %\".replace(\".\",\",\"),\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n", + "candidate_sha256": "23784ba7a75d05fe3fa9f4b0c139038c8f7fc88c587ca496697dab372656cae8", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "truncated_variance_annotation or real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".F [100%]\n================================== FAILURES ===================================\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\n1 failed, 1 passed, 90 deselected in 3.08s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "truncated_variance_annotation or real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n2 passed, 90 deselected in 2.75s\n", + "stderr": "" + } + }, + { + "name": "AD_COMMA", + "selection": "linear_histogram_truncation or log_histogram_keeps", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2834, + 2835, + 2836 + ] + ], + "patch": "--- \n+++ \n@@ -2831,6 +2831,9 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls} : {missing} exclues sur {len(vals)}, observations tronqu\u00e9es hors support {bins[0]:.6f} \u00e0 {bins[-1]:.6f}\".replace(\".\",\",\"),transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n", + "candidate_sha256": "bd572e62ce168ca96047e135efc376b3f7d1169935ff4b293814ec9070fcd46f", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation or log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:249: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:249: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n2 failed, 90 deselected in 1.78s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation or log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2846, + 2847, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2858, + 2859, + 2860, + 2862, + 2863, + 2864, + 2866, + 2872, + 2873, + 2986, + 2989 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n2 passed, 90 deselected in 1.59s\n", + "stderr": "" + } + }, + { + "name": "FD_COMMA_BOUND", + "selection": "linear_histogram_truncation or log_histogram_keeps", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2834, + 2835, + 2836 + ] + ], + "patch": "--- \n+++ \n@@ -2831,6 +2831,9 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls} : {missing} exclues sur {len(vals)}, observations tronqu\u00e9es hors support {bins[0]:.6f} \u00e0 {bins[-1]+.05:.6f}\".replace(\".\",\",\"),transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n", + "candidate_sha256": "9716df0cc0f83199f138b855c186cd07d9692d6e5e4490fa6774cf0c83739175", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation or log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n2 passed, 90 deselected in 1.70s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation or log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:249: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2846, + 2847, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2858, + 2859, + 2860, + 2862, + 2863, + 2864, + 2866, + 2872, + 2873, + 2986, + 2989 + ], + "stdout": ".F [100%]\n================================== FAILURES ===================================\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:249: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n1 failed, 1 passed, 90 deselected in 1.79s\n", + "stderr": "" + } + }, + { + "name": "A_TOTAL", + "selection": "linear_histogram_truncation", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2834, + 2835, + 2836, + 2837 + ], + [ + 2838 + ] + ], + "patch": "--- \n+++ \n@@ -2831,12 +2831,16 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ hist_kwargs = dict(density=True)\n+ if xscale == \"linear\":\n+ hist_kwargs = dict(density=False,weights=np.full(len(vals),1/(len(vals)*np.diff(bins)[0])))\n+ ax.text(.03,.12,f\"{cls}: density normalized by total {len(vals)}, support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n alpha=0.55,\n color=color,\n- density=True,\n+ **hist_kwargs,\n label=f\"{cls} m\u00e9diane={med:.3f}\",\n )\n # Marqueur central robuste pour chaque classe.\n", + "candidate_sha256": "6aca5f7f9faff6bf5cc64cb5d7d19b7719f3d85a08b735c46af0ad427ca53338", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:249: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:249: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n1 failed, 91 deselected in 1.39s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2847, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2854, + 2856, + 2857, + 2858, + 2859, + 2860, + 2861, + 2863, + 2864, + 2865, + 2867, + 2873, + 2874, + 2987, + 2990 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n1 passed, 91 deselected in 1.25s\n", + "stderr": "" + } + }, + { + "name": "F_TOTAL_LIE", + "selection": "linear_histogram_truncation", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2834, + 2835, + 2836, + 2837 + ], + [ + 2838 + ] + ], + "patch": "--- \n+++ \n@@ -2831,12 +2831,16 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ hist_kwargs = dict(density=True)\n+ if xscale == \"linear\":\n+ hist_kwargs = dict(density=True,weights=np.full(len(vals),1/(len(vals)*np.diff(bins)[0])))\n+ ax.text(.03,.12,f\"{cls}: density normalized by total {len(vals)}, support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n alpha=0.55,\n color=color,\n- density=True,\n+ **hist_kwargs,\n label=f\"{cls} m\u00e9diane={med:.3f}\",\n )\n # Marqueur central robuste pour chaque classe.\n", + "candidate_sha256": "a5c70cd0399d925e8b24162a115e05a8aab82e7d4270d899b7fb5e1c7245f3ca", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n1 passed, 91 deselected in 1.26s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:228: in assert_histogram_representation\n missing, edges = assert_histogram_population(call, expected, convention)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests\\visualizer_review_contracts.py:194: in assert_histogram_population\n assert_allclose(plotted, reference, atol=1e-10, rtol=1e-10)\nE AssertionError: \nE Not equal to tolerance rtol=1e-10, atol=1e-10\nE \nE Mismatched elements: 3 / 59 (5.08%)\nE Mismatch at indices:\nE [15]: 132.30182755914328 (ACTUAL), 7.938109653548597 (DESIRED)\nE [35]: 132.30182755914402 (ACTUAL), 7.938109653548641 (DESIRED)\nE [39]: 132.30182755914328 (ACTUAL), 7.938109653548597 (DESIRED)\nE Max absolute difference among violations: 124.36371791\nE Max relative difference among violations: 15.66666667\nE ACTUAL: array([ 0. , 0. , 0. , 0. , 0. ,\nE 0. , 0. , 0. , 0. , 0. ,\nE 0. , 0. , 0. , 0. , 0. ,...\nE DESIRED: array([0. , 0. , 0. , 0. , 0. , 0. , 0. ,\nE 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\nE 0. , 7.93811, 0. , 0. , 0. , 0. , 0. ,..." + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2847, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2854, + 2856, + 2857, + 2858, + 2859, + 2860, + 2861, + 2863, + 2864, + 2865, + 2867, + 2873, + 2874, + 2987, + 2990 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:228: in assert_histogram_representation\n missing, edges = assert_histogram_population(call, expected, convention)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests\\visualizer_review_contracts.py:194: in assert_histogram_population\n assert_allclose(plotted, reference, atol=1e-10, rtol=1e-10)\nE AssertionError: \nE Not equal to tolerance rtol=1e-10, atol=1e-10\nE \nE Mismatched elements: 3 / 59 (5.08%)\nE Mismatch at indices:\nE [15]: 132.30182755914328 (ACTUAL), 7.938109653548597 (DESIRED)\nE [35]: 132.30182755914402 (ACTUAL), 7.938109653548641 (DESIRED)\nE [39]: 132.30182755914328 (ACTUAL), 7.938109653548597 (DESIRED)\nE Max absolute difference among violations: 124.36371791\nE Max relative difference among violations: 15.66666667\nE ACTUAL: array([ 0. , 0. , 0. , 0. , 0. ,\nE 0. , 0. , 0. , 0. , 0. ,\nE 0. , 0. , 0. , 0. , 0. ,...\nE DESIRED: array([0. , 0. , 0. , 0. , 0. , 0. , 0. ,\nE 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\nE 0. , 7.93811, 0. , 0. , 0. , 0. , 0. ,...\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n1 failed, 91 deselected in 1.40s\n", + "stderr": "" + } + }, + { + "name": "F_CONDITIONAL_LIE", + "selection": "linear_histogram_truncation", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2834, + 2835, + 2836, + 2837 + ], + [ + 2838 + ] + ], + "patch": "--- \n+++ \n@@ -2831,12 +2831,16 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ hist_kwargs = dict(density=True)\n+ if xscale == \"linear\":\n+ hist_kwargs = dict(density=False,weights=np.full(len(vals),1/(len(vals)*np.diff(bins)[0])))\n+ ax.text(.03,.12,f\"{cls}: conditional density\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n alpha=0.55,\n color=color,\n- density=True,\n+ **hist_kwargs,\n label=f\"{cls} m\u00e9diane={med:.3f}\",\n )\n # Marqueur central robuste pour chaque classe.\n", + "candidate_sha256": "4d8d1843608d9525c6e0f0f388963b87de83b0cb321a8f31fc6bdb4ada9d35aa", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n1 passed, 91 deselected in 1.26s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:228: in assert_histogram_representation\n missing, edges = assert_histogram_population(call, expected, convention)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests\\visualizer_review_contracts.py:194: in assert_histogram_population\n assert_allclose(plotted, reference, atol=1e-10, rtol=1e-10)\nE AssertionError: \nE Not equal to tolerance rtol=1e-10, atol=1e-10\nE \nE Mismatched elements: 3 / 59 (5.08%)\nE Mismatch at indices:\nE [15]: 7.938109653548604 (ACTUAL), 1.0 (DESIRED)\nE [35]: 7.938109653548604 (ACTUAL), 1.0 (DESIRED)\nE [39]: 7.938109653548604 (ACTUAL), 1.0 (DESIRED)\nE Max absolute difference among violations: 6.93810965\nE Max relative difference among violations: 6.93810965\nE ACTUAL: array([0. , 0. , 0. , 0. , 0. , 0. , 0. ,\nE 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\nE 0. , 7.93811, 0. , 0. , 0. , 0. , 0. ,...\nE DESIRED: array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,\nE 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\nE 0., 1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\nE 0., 0., 0., 0., 0., 0., 0., 0.])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2847, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2854, + 2856, + 2857, + 2858, + 2859, + 2860, + 2861, + 2863, + 2864, + 2865, + 2867, + 2873, + 2874, + 2987, + 2990 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:228: in assert_histogram_representation\n missing, edges = assert_histogram_population(call, expected, convention)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests\\visualizer_review_contracts.py:194: in assert_histogram_population\n assert_allclose(plotted, reference, atol=1e-10, rtol=1e-10)\nE AssertionError: \nE Not equal to tolerance rtol=1e-10, atol=1e-10\nE \nE Mismatched elements: 3 / 59 (5.08%)\nE Mismatch at indices:\nE [15]: 7.938109653548604 (ACTUAL), 1.0 (DESIRED)\nE [35]: 7.938109653548604 (ACTUAL), 1.0 (DESIRED)\nE [39]: 7.938109653548604 (ACTUAL), 1.0 (DESIRED)\nE Max absolute difference among violations: 6.93810965\nE Max relative difference among violations: 6.93810965\nE ACTUAL: array([0. , 0. , 0. , 0. , 0. , 0. , 0. ,\nE 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\nE 0. , 7.93811, 0. , 0. , 0. , 0. , 0. ,...\nE DESIRED: array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,\nE 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\nE 0., 1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\nE 0., 0., 0., 0., 0., 0., 0., 0.])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n1 failed, 91 deselected in 1.43s\n", + "stderr": "" + } + }, + { + "name": "JOINT_TOTAL", + "selection": "", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 154 + ], + [ + 185 + ], + [ + 288 + ], + [ + 869 + ], + [ + 1018 + ], + [ + 1087 + ], + [ + 1110 + ], + [ + 1178, + 1179 + ], + [ + 1252 + ], + [ + 1319 + ], + [ + 1414 + ], + [ + 1559 + ], + [ + 2019 + ], + [ + 2040 + ], + [ + 2068 + ], + [ + 2278 + ], + [ + 2320 + ], + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2527, + 2528 + ], + [ + 2816 + ], + [ + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833 + ], + [ + 2834 + ], + [ + 3039 + ], + [ + 3213 + ] + ], + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, 100 * ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"{n_thresh} PCs\\n\u2192 {pca_analyzer.explained_variance_ratio[:n_thresh].sum()*100:.1f}%\",\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n@@ -285,7 +285,7 @@\n df = df.sort_values(\"loading\")\n \n # Couleur encodant le signe physique de la contribution.\n- colors = [\"#DD8452\" if v < 0 else \"#4C72B0\" for v in df[\"loading\"]]\n+ colors = [\"#CC5500\" if v < 0 else \"#0055CC\" for v in df[\"loading\"]]\n fig, ax = plt.subplots(figsize=(8, max(4, n_top * 0.35)), dpi=self.dpi)\n \n ax.barh(\n@@ -869,7 +869,7 @@\n ax.text(\n lam,\n ymax * 0.88,\n- nom,\n+ nom.replace(chr(92)*2, chr(92)),\n rotation=90,\n fontsize=6,\n color=\"crimson\",\n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ fig.canvas.print_figure(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n@@ -1084,9 +1084,7 @@\n \"Autoencodeur \u2014 Historique d'entra\u00eenement (LAMOST DR5)\", fontsize=13, y=1.02\n )\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_training_history\")\n return fig, axes\n \n def plot_ae_embedding(self, Z, meta, y, save_path=None):\n@@ -1109,6 +1107,7 @@\n \n PALETTE = {\"STAR\": \"#4C72B0\", \"GALAXY\": \"#DD8452\", \"QSO\": \"#55A868\"}\n MARKERS = {\"STAR\": \"o\", \"GALAXY\": \"s\", \"QSO\": \"^\"}\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -1176,6 +1175,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in axes[len(idx):]:\n+ unused.set_visible(False)\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n@@ -1248,9 +1249,7 @@\n ax.legend(fontsize=9)\n ax.grid(True, alpha=0.3)\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_ae_vs_pca\")\n return fig, ax\n \n def plot_latent_interpolation(\n@@ -1317,7 +1316,7 @@\n classes = np.unique(y)\n palette = [\"#4C72B0\", \"#DD8452\", \"#55A868\", \"#C44E52\"]\n fig, ax = plt.subplots(figsize=(9, 5), dpi=self.dpi)\n- for cls, color in zip(classes, palette):\n+ for cls, color in zip(classes, palette*((len(classes)+len(palette)-1)//len(palette))):\n mask = y == cls\n vals = mse_per_sample[mask]\n # Histogrammes normalis\u00e9s pour comparer les formes de distribution.\n@@ -1413,7 +1412,7 @@\n ),\n )\n sm = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n@@ -1558,7 +1557,7 @@\n )\n ax.grid(True, alpha=0.2)\n sm2 = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm2.set_array([])\n plt.colorbar(\n@@ -2017,7 +2016,7 @@\n ncols = 4\n nrows = (n_show + ncols - 1) // ncols\n fig, axes = plt.subplots(nrows, ncols, figsize=(5 * ncols, 4 * nrows), dpi=120)\n- axes_flat = axes.flatten() if n_show > 1 else [axes]\n+ axes_flat = np.asarray(axes).ravel()\n \n for ax_i, cid in zip(axes_flat, top_cids):\n profile = cluster_means.loc[cid]\n@@ -2038,7 +2037,7 @@\n ax_i.set_xlabel(\"Score moyen (\u03c3)\", fontsize=8)\n ax_i.grid(axis=\"x\", alpha=0.3)\n ax_i.set_xlim(-3, 3)\n- for ax_i in axes_flat[n_show:]:\n+ for ax_i in axes_flat[len(top_cids):]:\n ax_i.axis(\"off\")\n fig.suptitle(\n \"Top-5 features caract\u00e9ristiques par cluster HDBSCAN\\n\"\n@@ -2066,7 +2065,7 @@\n \n # V\u00e9rifie si une vraie probabilit\u00e9 est disponible.\n classes_pred = sorted(set(y_pred))\n- has_proba = confidence is not None and not np.all(confidence == 1.0)\n+ has_proba = confidence is not None\n fig, axes = plt.subplots(1, 3, figsize=(22, 8), dpi=self.dpi)\n \n ax = axes[0]\n@@ -2276,7 +2275,7 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0, 1.01)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n@@ -2318,6 +2317,7 @@\n ]\n \n fig, axes = plt.subplots(1, 1 + len(available), figsize=(22, 5), dpi=self.dpi)\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2533,6 +2524,8 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ if not (len(X) == len(X_recon) == len(spectral_types)):\n+ raise RuntimeError(\"Observation alignment: incompatible lengths\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n@@ -2821,7 +2814,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(max(vals.min(), np.finfo(float).tiny)), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n@@ -2831,12 +2824,19 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls}: excluded {missing} of {len(vals)} outside support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n+ hist_kwargs = dict(density=True)\n+ if xscale == \"linear\":\n+ hist_kwargs = dict(density=False,weights=np.full(len(vals),1/(len(vals)*np.diff(bins)[0])))\n+ ax.text(.03,.12,f\"{cls}: density normalized by total {len(vals)}, support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n alpha=0.55,\n color=color,\n- density=True,\n+ **hist_kwargs,\n label=f\"{cls} m\u00e9diane={med:.3f}\",\n )\n # Marqueur central robuste pour chaque classe.\n@@ -3054,7 +3054,7 @@\n MS_G_HOT + (MS_G_COOL - MS_G_HOT) * 0.35,\n ),\n (T_LO + (T_HI - T_LO) * 0.25, MS_G_COOL - 0.10),\n- (T_LO + T_PAD, G_HI - T_PAD * 2),\n+ (T_LO + T_PAD, G_HI - G_PAD * 2),\n (T_LO + T_PAD, G_HI - G_PAD),\n (T_LO + (T_HI - T_LO) * 0.20, MS_G_COOL + MS_W * 0.6),\n (\n@@ -3212,7 +3212,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 population fournie\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "candidate_sha256": "ee8cd6d8f1ef1c46ee4090f4f586b985e2d03225f410542ee204556856af65d4", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_disclosure_identifies_the_relevant_exclusion_bound", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_localized_numbers_and_population_suffixes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_variance_claims_use_numbers_and_component_meaning", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[vertical]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[horizontal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_denominators_and_claims_are_distinguishable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x0000019462D00C80>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x00000194AE996F80>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:265: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x00000194AEA19460>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:277: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:278: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:298: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:297: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:306: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:377: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1553/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1553/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:342: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:445: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:450: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:249: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "..................................................................FFFFFF [ 78%]\nFFFFFFFFF.FFFFFFFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x0000019462D00C80>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x00000194AE996F80>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:265: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x00000194AEA19460>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:277: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:278: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:298: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:297: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:306: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:377: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1553/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1553/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:342: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:445: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:450: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:249: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n25 failed, 67 passed in 34.84s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_disclosure_identifies_the_relevant_exclusion_bound", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_localized_numbers_and_population_suffixes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_variance_claims_use_numbers_and_component_meaning", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[vertical]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[horizontal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_denominators_and_claims_are_distinguishable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1090, + 1092, + 1095, + 1096, + 1097, + 1098, + 1099, + 1102, + 1104, + 1105, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1126, + 1127, + 1128, + 1129, + 1131, + 1132, + 1133, + 1135, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1149, + 1150, + 1151, + 1153, + 1154, + 1155, + 1156, + 1158, + 1159, + 1162, + 1164, + 1165, + 1169, + 1171, + 1172, + 1173, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1195, + 1196, + 1197, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1211, + 1212, + 1215, + 1217, + 1219, + 1221, + 1222, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1232, + 1234, + 1236, + 1237, + 1239, + 1241, + 1242, + 1243, + 1244, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1252, + 1253, + 1255, + 1260, + 1261, + 1262, + 1266, + 1267, + 1268, + 1269, + 1271, + 1272, + 1274, + 1275, + 1277, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1285, + 1287, + 1288, + 1289, + 1291, + 1292, + 1293, + 1294, + 1295, + 1296, + 1298, + 1299, + 1300, + 1302, + 1303, + 1304, + 1305, + 1306, + 1308, + 1309, + 1312, + 1314, + 1316, + 1317, + 1318, + 1319, + 1320, + 1321, + 1323, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1332, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1343, + 1351, + 1356, + 1359, + 1360, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1371, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1386, + 1387, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1414, + 1415, + 1417, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1426, + 1427, + 1428, + 1429, + 1430, + 1432, + 1433, + 1434, + 1435, + 1437, + 1440, + 1441, + 1442, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1455, + 1456, + 1457, + 1458, + 1460, + 1461, + 1462, + 1463, + 1464, + 1466, + 1467, + 1468, + 1470, + 1475, + 1478, + 1481, + 1482, + 1483, + 1484, + 1485, + 1487, + 1488, + 1489, + 1490, + 1493, + 1494, + 1495, + 1498, + 1499, + 1501, + 1502, + 1504, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1516, + 1517, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1529, + 1530, + 1531, + 1532, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1558, + 1559, + 1560, + 1562, + 1563, + 1564, + 1565, + 1567, + 1568, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1582, + 1583, + 1584, + 1585, + 1587, + 1588, + 1589, + 1590, + 1592, + 1593, + 1594, + 1596, + 1599, + 1600, + 1601, + 1604, + 1605, + 1607, + 1608, + 1609, + 1612, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1620, + 1621, + 1622, + 1623, + 1624, + 1625, + 1627, + 1628, + 1629, + 1630, + 1631, + 1633, + 1634, + 1635, + 1636, + 1638, + 1643, + 1647, + 1648, + 1649, + 1650, + 1651, + 1652, + 1654, + 1655, + 1656, + 1657, + 1658, + 1660, + 1662, + 1664, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1675, + 1676, + 1678, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1690, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1703, + 1704, + 1705, + 1706, + 1707, + 1709, + 1711, + 1712, + 1714, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1724, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1736, + 1752, + 1753, + 1754, + 1755, + 1756, + 1757, + 1759, + 1761, + 1762, + 1763, + 1764, + 1765, + 1767, + 1768, + 1769, + 1771, + 1776, + 1777, + 1790, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1798, + 1799, + 1800, + 1801, + 1802, + 1803, + 1806, + 1808, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1819, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1832, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1845, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1854, + 1855, + 1856, + 1857, + 1860, + 1861, + 1862, + 1865, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1875, + 1876, + 1877, + 1879, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1890, + 1911, + 1912, + 1915, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1925, + 1927, + 1928, + 1931, + 1932, + 1933, + 1934, + 1935, + 1936, + 1938, + 1939, + 1940, + 1941, + 1942, + 1943, + 1945, + 1946, + 1947, + 1949, + 1951, + 1955, + 1956, + 1960, + 1961, + 1962, + 1963, + 1965, + 1966, + 1967, + 1969, + 1970, + 1972, + 1973, + 1974, + 1975, + 1976, + 1978, + 1979, + 1980, + 1982, + 1983, + 1984, + 1986, + 1987, + 1988, + 1989, + 1991, + 1992, + 1993, + 1995, + 1996, + 1998, + 1999, + 2000, + 2002, + 2006, + 2007, + 2011, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2021, + 2022, + 2024, + 2025, + 2026, + 2027, + 2028, + 2029, + 2031, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2045, + 2046, + 2048, + 2049, + 2050, + 2054, + 2061, + 2064, + 2067, + 2068, + 2069, + 2071, + 2072, + 2073, + 2075, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2085, + 2086, + 2087, + 2088, + 2089, + 2091, + 2092, + 2094, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2106, + 2107, + 2109, + 2112, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2121, + 2122, + 2124, + 2125, + 2127, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2136, + 2137, + 2139, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2148, + 2149, + 2150, + 2152, + 2153, + 2154, + 2155, + 2157, + 2158, + 2159, + 2161, + 2165, + 2169, + 2170, + 2171, + 2172, + 2174, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2185, + 2186, + 2188, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2198, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2206, + 2207, + 2208, + 2209, + 2213, + 2218, + 2219, + 2220, + 2223, + 2224, + 2226, + 2229, + 2230, + 2232, + 2233, + 2234, + 2235, + 2237, + 2238, + 2240, + 2241, + 2242, + 2243, + 2245, + 2246, + 2247, + 2249, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2259, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2268, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2278, + 2279, + 2280, + 2281, + 2282, + 2283, + 2287, + 2292, + 2296, + 2297, + 2298, + 2299, + 2301, + 2302, + 2303, + 2304, + 2305, + 2307, + 2308, + 2313, + 2314, + 2315, + 2316, + 2319, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2527, + 2528, + 2529, + 2543, + 2557, + 2558, + 2559, + 2560, + 2563, + 2564, + 2566, + 2567, + 2568, + 2569, + 2570, + 2571, + 2572, + 2574, + 2576, + 2577, + 2578, + 2581, + 2582, + 2591, + 2592, + 2593, + 2595, + 2596, + 2598, + 2602, + 2603, + 2604, + 2605, + 2606, + 2608, + 2611, + 2612, + 2614, + 2615, + 2616, + 2617, + 2618, + 2619, + 2620, + 2621, + 2622, + 2623, + 2624, + 2625, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2633, + 2634, + 2635, + 2637, + 2639, + 2640, + 2641, + 2642, + 2643, + 2644, + 2645, + 2646, + 2647, + 2649, + 2650, + 2651, + 2652, + 2654, + 2655, + 2657, + 2658, + 2659, + 2661, + 2662, + 2663, + 2665, + 2670, + 2671, + 2674, + 2675, + 2678, + 2679, + 2680, + 2711, + 2712, + 2715, + 2717, + 2718, + 2719, + 2720, + 2724, + 2725, + 2726, + 2727, + 2728, + 2729, + 2733, + 2734, + 2735, + 2736, + 2737, + 2738, + 2741, + 2742, + 2743, + 2744, + 2745, + 2746, + 2747, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2771, + 2772, + 2774, + 2775, + 2777, + 2778, + 2779, + 2780, + 2781, + 2782, + 2783, + 2785, + 2786, + 2787, + 2788, + 2790, + 2791, + 2792, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "........................................................................ [ 78%]\n.................... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n92 passed in 43.03s\n", + "stderr": "" + } + }, + { + "name": "JOINT", + "selection": "", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 154 + ], + [ + 185 + ], + [ + 288 + ], + [ + 869 + ], + [ + 1018 + ], + [ + 1087 + ], + [ + 1110 + ], + [ + 1178, + 1179 + ], + [ + 1252 + ], + [ + 1319 + ], + [ + 1414 + ], + [ + 1559 + ], + [ + 2019 + ], + [ + 2040 + ], + [ + 2068 + ], + [ + 2278 + ], + [ + 2320 + ], + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2527, + 2528 + ], + [ + 2816 + ], + [ + 2827, + 2828, + 2829 + ], + [ + 3035 + ], + [ + 3209 + ] + ], + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, 100 * ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"{n_thresh} PCs\\n\u2192 {pca_analyzer.explained_variance_ratio[:n_thresh].sum()*100:.1f}%\",\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n@@ -285,7 +285,7 @@\n df = df.sort_values(\"loading\")\n \n # Couleur encodant le signe physique de la contribution.\n- colors = [\"#DD8452\" if v < 0 else \"#4C72B0\" for v in df[\"loading\"]]\n+ colors = [\"#CC5500\" if v < 0 else \"#0055CC\" for v in df[\"loading\"]]\n fig, ax = plt.subplots(figsize=(8, max(4, n_top * 0.35)), dpi=self.dpi)\n \n ax.barh(\n@@ -869,7 +869,7 @@\n ax.text(\n lam,\n ymax * 0.88,\n- nom,\n+ nom.replace(chr(92)*2, chr(92)),\n rotation=90,\n fontsize=6,\n color=\"crimson\",\n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ fig.canvas.print_figure(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n@@ -1084,9 +1084,7 @@\n \"Autoencodeur \u2014 Historique d'entra\u00eenement (LAMOST DR5)\", fontsize=13, y=1.02\n )\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_training_history\")\n return fig, axes\n \n def plot_ae_embedding(self, Z, meta, y, save_path=None):\n@@ -1109,6 +1107,7 @@\n \n PALETTE = {\"STAR\": \"#4C72B0\", \"GALAXY\": \"#DD8452\", \"QSO\": \"#55A868\"}\n MARKERS = {\"STAR\": \"o\", \"GALAXY\": \"s\", \"QSO\": \"^\"}\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -1176,6 +1175,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in axes[len(idx):]:\n+ unused.set_visible(False)\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n@@ -1248,9 +1249,7 @@\n ax.legend(fontsize=9)\n ax.grid(True, alpha=0.3)\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_ae_vs_pca\")\n return fig, ax\n \n def plot_latent_interpolation(\n@@ -1317,7 +1316,7 @@\n classes = np.unique(y)\n palette = [\"#4C72B0\", \"#DD8452\", \"#55A868\", \"#C44E52\"]\n fig, ax = plt.subplots(figsize=(9, 5), dpi=self.dpi)\n- for cls, color in zip(classes, palette):\n+ for cls, color in zip(classes, palette*((len(classes)+len(palette)-1)//len(palette))):\n mask = y == cls\n vals = mse_per_sample[mask]\n # Histogrammes normalis\u00e9s pour comparer les formes de distribution.\n@@ -1413,7 +1412,7 @@\n ),\n )\n sm = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n@@ -1558,7 +1557,7 @@\n )\n ax.grid(True, alpha=0.2)\n sm2 = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm2.set_array([])\n plt.colorbar(\n@@ -2017,7 +2016,7 @@\n ncols = 4\n nrows = (n_show + ncols - 1) // ncols\n fig, axes = plt.subplots(nrows, ncols, figsize=(5 * ncols, 4 * nrows), dpi=120)\n- axes_flat = axes.flatten() if n_show > 1 else [axes]\n+ axes_flat = np.asarray(axes).ravel()\n \n for ax_i, cid in zip(axes_flat, top_cids):\n profile = cluster_means.loc[cid]\n@@ -2038,7 +2037,7 @@\n ax_i.set_xlabel(\"Score moyen (\u03c3)\", fontsize=8)\n ax_i.grid(axis=\"x\", alpha=0.3)\n ax_i.set_xlim(-3, 3)\n- for ax_i in axes_flat[n_show:]:\n+ for ax_i in axes_flat[len(top_cids):]:\n ax_i.axis(\"off\")\n fig.suptitle(\n \"Top-5 features caract\u00e9ristiques par cluster HDBSCAN\\n\"\n@@ -2066,7 +2065,7 @@\n \n # V\u00e9rifie si une vraie probabilit\u00e9 est disponible.\n classes_pred = sorted(set(y_pred))\n- has_proba = confidence is not None and not np.all(confidence == 1.0)\n+ has_proba = confidence is not None\n fig, axes = plt.subplots(1, 3, figsize=(22, 8), dpi=self.dpi)\n \n ax = axes[0]\n@@ -2276,7 +2275,7 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0, 1.01)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n@@ -2318,6 +2317,7 @@\n ]\n \n fig, axes = plt.subplots(1, 1 + len(available), figsize=(22, 5), dpi=self.dpi)\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2533,6 +2524,8 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ if not (len(X) == len(X_recon) == len(spectral_types)):\n+ raise RuntimeError(\"Observation alignment: incompatible lengths\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n@@ -2821,7 +2814,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(max(vals.min(), np.finfo(float).tiny)), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n@@ -2831,6 +2824,9 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls}: excluded {missing} of {len(vals)} outside support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n@@ -3054,7 +3050,7 @@\n MS_G_HOT + (MS_G_COOL - MS_G_HOT) * 0.35,\n ),\n (T_LO + (T_HI - T_LO) * 0.25, MS_G_COOL - 0.10),\n- (T_LO + T_PAD, G_HI - T_PAD * 2),\n+ (T_LO + T_PAD, G_HI - G_PAD * 2),\n (T_LO + T_PAD, G_HI - G_PAD),\n (T_LO + (T_HI - T_LO) * 0.20, MS_G_COOL + MS_W * 0.6),\n (\n@@ -3212,7 +3208,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 population fournie\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "candidate_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_disclosure_identifies_the_relevant_exclusion_bound", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_localized_numbers_and_population_suffixes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_variance_claims_use_numbers_and_component_meaning", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[vertical]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[horizontal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_denominators_and_claims_are_distinguishable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x000001A9FE938C80>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x000001AA30456F80>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:265: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000001AA30505460>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:277: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:278: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:298: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:297: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:306: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:377: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1555/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1555/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:342: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:445: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:450: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:249: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "..................................................................FFFFFF [ 78%]\nFFFFFFFFF.FFFFFFFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x000001A9FE938C80>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x000001AA30456F80>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:265: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000001AA30505460>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:277: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:278: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:298: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:297: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:306: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:377: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1555/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1555/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:342: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:445: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:450: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:249: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n25 failed, 67 passed in 34.79s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_disclosure_identifies_the_relevant_exclusion_bound", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_localized_numbers_and_population_suffixes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_variance_claims_use_numbers_and_component_meaning", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[vertical]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[horizontal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_denominators_and_claims_are_distinguishable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1090, + 1092, + 1095, + 1096, + 1097, + 1098, + 1099, + 1102, + 1104, + 1105, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1126, + 1127, + 1128, + 1129, + 1131, + 1132, + 1133, + 1135, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1149, + 1150, + 1151, + 1153, + 1154, + 1155, + 1156, + 1158, + 1159, + 1162, + 1164, + 1165, + 1169, + 1171, + 1172, + 1173, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1195, + 1196, + 1197, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1211, + 1212, + 1215, + 1217, + 1219, + 1221, + 1222, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1232, + 1234, + 1236, + 1237, + 1239, + 1241, + 1242, + 1243, + 1244, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1252, + 1253, + 1255, + 1260, + 1261, + 1262, + 1266, + 1267, + 1268, + 1269, + 1271, + 1272, + 1274, + 1275, + 1277, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1285, + 1287, + 1288, + 1289, + 1291, + 1292, + 1293, + 1294, + 1295, + 1296, + 1298, + 1299, + 1300, + 1302, + 1303, + 1304, + 1305, + 1306, + 1308, + 1309, + 1312, + 1314, + 1316, + 1317, + 1318, + 1319, + 1320, + 1321, + 1323, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1332, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1343, + 1351, + 1356, + 1359, + 1360, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1371, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1386, + 1387, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1414, + 1415, + 1417, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1426, + 1427, + 1428, + 1429, + 1430, + 1432, + 1433, + 1434, + 1435, + 1437, + 1440, + 1441, + 1442, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1455, + 1456, + 1457, + 1458, + 1460, + 1461, + 1462, + 1463, + 1464, + 1466, + 1467, + 1468, + 1470, + 1475, + 1478, + 1481, + 1482, + 1483, + 1484, + 1485, + 1487, + 1488, + 1489, + 1490, + 1493, + 1494, + 1495, + 1498, + 1499, + 1501, + 1502, + 1504, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1516, + 1517, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1529, + 1530, + 1531, + 1532, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1558, + 1559, + 1560, + 1562, + 1563, + 1564, + 1565, + 1567, + 1568, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1582, + 1583, + 1584, + 1585, + 1587, + 1588, + 1589, + 1590, + 1592, + 1593, + 1594, + 1596, + 1599, + 1600, + 1601, + 1604, + 1605, + 1607, + 1608, + 1609, + 1612, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1620, + 1621, + 1622, + 1623, + 1624, + 1625, + 1627, + 1628, + 1629, + 1630, + 1631, + 1633, + 1634, + 1635, + 1636, + 1638, + 1643, + 1647, + 1648, + 1649, + 1650, + 1651, + 1652, + 1654, + 1655, + 1656, + 1657, + 1658, + 1660, + 1662, + 1664, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1675, + 1676, + 1678, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1690, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1703, + 1704, + 1705, + 1706, + 1707, + 1709, + 1711, + 1712, + 1714, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1724, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1736, + 1752, + 1753, + 1754, + 1755, + 1756, + 1757, + 1759, + 1761, + 1762, + 1763, + 1764, + 1765, + 1767, + 1768, + 1769, + 1771, + 1776, + 1777, + 1790, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1798, + 1799, + 1800, + 1801, + 1802, + 1803, + 1806, + 1808, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1819, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1832, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1845, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1854, + 1855, + 1856, + 1857, + 1860, + 1861, + 1862, + 1865, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1875, + 1876, + 1877, + 1879, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1890, + 1911, + 1912, + 1915, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1925, + 1927, + 1928, + 1931, + 1932, + 1933, + 1934, + 1935, + 1936, + 1938, + 1939, + 1940, + 1941, + 1942, + 1943, + 1945, + 1946, + 1947, + 1949, + 1951, + 1955, + 1956, + 1960, + 1961, + 1962, + 1963, + 1965, + 1966, + 1967, + 1969, + 1970, + 1972, + 1973, + 1974, + 1975, + 1976, + 1978, + 1979, + 1980, + 1982, + 1983, + 1984, + 1986, + 1987, + 1988, + 1989, + 1991, + 1992, + 1993, + 1995, + 1996, + 1998, + 1999, + 2000, + 2002, + 2006, + 2007, + 2011, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2021, + 2022, + 2024, + 2025, + 2026, + 2027, + 2028, + 2029, + 2031, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2045, + 2046, + 2048, + 2049, + 2050, + 2054, + 2061, + 2064, + 2067, + 2068, + 2069, + 2071, + 2072, + 2073, + 2075, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2085, + 2086, + 2087, + 2088, + 2089, + 2091, + 2092, + 2094, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2106, + 2107, + 2109, + 2112, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2121, + 2122, + 2124, + 2125, + 2127, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2136, + 2137, + 2139, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2148, + 2149, + 2150, + 2152, + 2153, + 2154, + 2155, + 2157, + 2158, + 2159, + 2161, + 2165, + 2169, + 2170, + 2171, + 2172, + 2174, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2185, + 2186, + 2188, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2198, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2206, + 2207, + 2208, + 2209, + 2213, + 2218, + 2219, + 2220, + 2223, + 2224, + 2226, + 2229, + 2230, + 2232, + 2233, + 2234, + 2235, + 2237, + 2238, + 2240, + 2241, + 2242, + 2243, + 2245, + 2246, + 2247, + 2249, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2259, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2268, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2278, + 2279, + 2280, + 2281, + 2282, + 2283, + 2287, + 2292, + 2296, + 2297, + 2298, + 2299, + 2301, + 2302, + 2303, + 2304, + 2305, + 2307, + 2308, + 2313, + 2314, + 2315, + 2316, + 2319, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2527, + 2528, + 2529, + 2543, + 2557, + 2558, + 2559, + 2560, + 2563, + 2564, + 2566, + 2567, + 2568, + 2569, + 2570, + 2571, + 2572, + 2574, + 2576, + 2577, + 2578, + 2581, + 2582, + 2591, + 2592, + 2593, + 2595, + 2596, + 2598, + 2602, + 2603, + 2604, + 2605, + 2606, + 2608, + 2611, + 2612, + 2614, + 2615, + 2616, + 2617, + 2618, + 2619, + 2620, + 2621, + 2622, + 2623, + 2624, + 2625, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2633, + 2634, + 2635, + 2637, + 2639, + 2640, + 2641, + 2642, + 2643, + 2644, + 2645, + 2646, + 2647, + 2649, + 2650, + 2651, + 2652, + 2654, + 2655, + 2657, + 2658, + 2659, + 2661, + 2662, + 2663, + 2665, + 2670, + 2671, + 2674, + 2675, + 2678, + 2679, + 2680, + 2711, + 2712, + 2715, + 2717, + 2718, + 2719, + 2720, + 2724, + 2725, + 2726, + 2727, + 2728, + 2729, + 2733, + 2734, + 2735, + 2736, + 2737, + 2738, + 2741, + 2742, + 2743, + 2744, + 2745, + 2746, + 2747, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2771, + 2772, + 2774, + 2775, + 2777, + 2778, + 2779, + 2780, + 2781, + 2782, + 2783, + 2785, + 2786, + 2787, + 2788, + 2790, + 2791, + 2792, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2859, + 2865, + 2866, + 2869, + 2871, + 2872, + 2873, + 2874, + 2875, + 2877, + 2879, + 2880, + 2882, + 2883, + 2885, + 2891, + 2892, + 2893, + 2894, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2906, + 2907, + 2908, + 2909, + 2911, + 2912, + 2913, + 2914, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2924, + 2926, + 2928, + 2930, + 2931, + 2932, + 2942, + 2943, + 2944, + 2945, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2954, + 2955, + 2956, + 2957, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2966, + 2967, + 2968, + 2970, + 2971, + 2973, + 2974, + 2976, + 2977, + 2979, + 2982, + 2995, + 2996, + 2997, + 2999, + 3000, + 3001, + 3002, + 3004, + 3005, + 3006, + 3011, + 3012, + 3013, + 3014, + 3016, + 3017, + 3026, + 3027, + 3028, + 3031, + 3034, + 3035, + 3037, + 3038, + 3039, + 3040, + 3041, + 3042, + 3043, + 3044, + 3046, + 3047, + 3048, + 3049, + 3050, + 3052, + 3053, + 3054, + 3055, + 3056, + 3057, + 3058, + 3060, + 3064, + 3065, + 3066, + 3067, + 3068, + 3069, + 3070, + 3071, + 3073, + 3074, + 3075, + 3076, + 3077, + 3078, + 3082, + 3083, + 3084, + 3085, + 3086, + 3087, + 3088, + 3089, + 3091, + 3092, + 3093, + 3094, + 3095, + 3096, + 3097, + 3101, + 3102, + 3103, + 3104, + 3105, + 3106, + 3107, + 3108, + 3110, + 3111, + 3112, + 3113, + 3114, + 3115, + 3116, + 3122, + 3125, + 3138, + 3139, + 3140, + 3141, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3151, + 3152, + 3153, + 3156, + 3157, + 3158, + 3159, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3167, + 3168, + 3169, + 3170, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3184, + 3185, + 3186, + 3187, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3199, + 3200, + 3201, + 3202, + 3204, + 3205, + 3207, + 3208, + 3209, + 3210, + 3212, + 3213, + 3215, + 3216, + 3218, + 3219 + ], + "stdout": "........................................................................ [ 78%]\n.................... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-muzop8om\\result.xml -\n92 passed in 43.14s\n", + "stderr": "" + } + } + ], + "executed_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/proofs_dimred_visualizer.py": "2ece4074314b52b26994bb1593e941e6b008e21d70dbc8de7b89d7fd6a3937fd", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "79671f840cc76d57ebdc1257b624c8de6078bc5db79023738f7128d3a77b0dec", + "tests/test_visualizer_review_contracts.py": "1d2818457af205945f30ea1774bab0aadcde707a4ded95f3bc92ac0c09e40e9a" + }, + "protected_unchanged": true +} diff --git a/audit/m28_r3_frozen_reverse_results.json b/audit/m28_r3_frozen_reverse_results.json new file mode 100644 index 0000000..ab2f804 --- /dev/null +++ b/audit/m28_r3_frozen_reverse_results.json @@ -0,0 +1,2426 @@ +{ + "active_head": "e924f36f24412a435f5ca54a95cdfad914835ff2", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6" + }, + "mode": "reverse", + "runs": [], + "executed_files_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/proofs_dimred_visualizer.py": "2ece4074314b52b26994bb1593e941e6b008e21d70dbc8de7b89d7fd6a3937fd", + "tests/visualizer_review_contracts.py": "79671f840cc76d57ebdc1257b624c8de6078bc5db79023738f7128d3a77b0dec", + "tests/test_visualizer_review_contracts.py": "1d2818457af205945f30ea1774bab0aadcde707a4ded95f3bc92ac0c09e40e9a" + }, + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_visualizer_review_contracts::test_histogram_denominators_and_claims_are_distinguishable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[horizontal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[vertical]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_variance_claims_use_numbers_and_component_meaning", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_localized_numbers_and_population_suffixes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_disclosure_identifies_the_relevant_exclusion_bound", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ".................................................................. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-hnci3k68\\result.xml -\n66 passed in 19.44s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_r3_frozen_validation_results.json b/audit/m28_r3_frozen_validation_results.json new file mode 100644 index 0000000..0ebacfb --- /dev/null +++ b/audit/m28_r3_frozen_validation_results.json @@ -0,0 +1,151 @@ +{ + "active_head": "e924f36f24412a435f5ca54a95cdfad914835ff2", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "executable": "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "versions": { + "numpy": "2.4.6", + "pandas": "3.1.1", + "scipy": "1.17.1", + "scikit-learn": "1.9.1", + "matplotlib": "3.11.2", + "pytest": "8.4.2", + "black": "24.4.2", + "ruff": "0.5.0", + "pillow": "13.0.0" + }, + "effective_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/visualizer_review_contracts.py": "79671f840cc76d57ebdc1257b624c8de6078bc5db79023738f7128d3a77b0dec", + "tests/test_visualizer_review_contracts.py": "1d2818457af205945f30ea1774bab0aadcde707a4ded95f3bc92ac0c09e40e9a", + "audit/check_m28_evidence.py": "bac3e5210eb94a2642c3dbb6e79824899cb66920d1c11233f900de38a61d1485", + "audit/check_m28_boundaries.py": "72f0c956c8719acafe0d9c07fa05e93c3f4d69ce297a8befeccef73bad4cdfb0", + "audit/check_m28_validation.py": "fda730977f875e9b951171a89e5e14d44ca0fa7524e2c7651e45d743bc581e1b", + "audit/check_m28_review.py": "9a2a2e41e9e87a965f6f345432f619db60c697456d883a3b3a56f6ba4c8540e9" + }, + "commands": [ + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-W", + "error", + "--junitxml=test-results/m28-targeted-validation.xml" + ], + "exit_code": 0, + "stdout": ".................................................................. [100%]\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-targeted-validation.xml -\n66 passed in 7.87s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "--junitxml=test-results/m28-complete-validation.xml" + ], + "exit_code": 0, + "stdout": "........................................................................ [ 10%]\n........................................................................ [ 20%]\n........................................................................ [ 30%]\n........................................................................ [ 41%]\n........................................................................ [ 51%]\n........................................................................ [ 61%]\n........................................................................ [ 72%]\n........................................................................ [ 82%]\n........................................................................ [ 92%]\n.................................................. [100%]\n============================== warnings summary ===============================\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_partial_esa_supplement_merges_without_losing_xmatch_rows\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_bulk_without_matches_stops_auto_fallback\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_cone_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_retry_limit_raises_or_falls_back_by_mode\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_transient_failure_retries_then_succeeds\n C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\tools\\gaia_crossmatcher.py:1210: Pandas4Warning: The inplace keyword in DataFrame.drop is deprecated and will be removed in a future version (PDEP-8).\n See https://pandas.pydata.org/docs/dev/whatsnew/v3.1.0.html#deprecation-inplace for more details.\n df_merged.drop(columns=[\"objid\"], inplace=True, errors=\"ignore\")\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-complete-validation.xml -\n698 passed, 62 deselected, 7 warnings in 23.13s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "--import-mode=importlib", + "--junitxml=test-results/m28-importlib-validation.xml" + ], + "exit_code": 0, + "stdout": "........................................................................ [ 10%]\n........................................................................ [ 20%]\n........................................................................ [ 30%]\n........................................................................ [ 41%]\n........................................................................ [ 51%]\n........................................................................ [ 61%]\n........................................................................ [ 72%]\n........................................................................ [ 82%]\n........................................................................ [ 92%]\n.................................................. [100%]\n============================== warnings summary ===============================\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_partial_esa_supplement_merges_without_losing_xmatch_rows\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_bulk_without_matches_stops_auto_fallback\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_cone_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_retry_limit_raises_or_falls_back_by_mode\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_transient_failure_retries_then_succeeds\n C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\tools\\gaia_crossmatcher.py:1210: Pandas4Warning: The inplace keyword in DataFrame.drop is deprecated and will be removed in a future version (PDEP-8).\n See https://pandas.pydata.org/docs/dev/whatsnew/v3.1.0.html#deprecation-inplace for more details.\n df_merged.drop(columns=[\"objid\"], inplace=True, errors=\"ignore\")\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-importlib-validation.xml -\n698 passed, 62 deselected, 7 warnings in 22.57s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "black", + "--check", + "src", + "tests", + "scripts", + "app.py", + "audit/check_m28_evidence.py", + "audit/check_m28_boundaries.py", + "audit/check_m28_validation.py", + "audit/check_m28_review.py" + ], + "exit_code": 0, + "stdout": "", + "stderr": "All done! \u2728 \ud83c\udf70 \u2728\n48 files would be left unchanged.\n" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "ruff", + "check", + "src", + "tests", + "scripts", + "app.py", + "audit/check_m28_evidence.py", + "audit/check_m28_boundaries.py", + "audit/check_m28_validation.py", + "audit/check_m28_review.py" + ], + "exit_code": 0, + "stdout": "All checks passed!\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pip", + "check" + ], + "exit_code": 0, + "stdout": "No broken requirements found.\n", + "stderr": "" + }, + { + "command": [ + "git", + "diff", + "--check" + ], + "exit_code": 0, + "stdout": "", + "stderr": "" + }, + { + "command": [ + "git", + "diff", + "--exit-code", + "39dad874610745ccd456d26972e90f6fb3a11405", + "--", + "src", + "notebooks", + "data", + "models", + "requirements", + "pyproject.toml", + ".github", + "app.py", + "AGENTS.md" + ], + "exit_code": 0, + "stdout": "", + "stderr": "" + } + ], + "all_commands_passed": true +} diff --git a/audit/m28_r3_mutations_results.json b/audit/m28_r3_mutations_results.json new file mode 100644 index 0000000..d2b544d --- /dev/null +++ b/audit/m28_r3_mutations_results.json @@ -0,0 +1,10113 @@ +{ + "active_head": "e924f36f24412a435f5ca54a95cdfad914835ff2", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6" + }, + "mode": "mutations", + "runs": [ + { + "name": "M01_color_row_roll", + "method": "plot_embedding", + "selection": "embedding_exact_observation", + "changed_lines": [ + 528 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "fbb7900faa59e5ae27981ef362e9ee99e219001a78cd03f3f8854d4bd679b3e1", + "patch": "--- \n+++ \n@@ -525,7 +525,7 @@\n # Chaque classe est trac\u00e9e s\u00e9par\u00e9ment pour g\u00e9rer couleur + marqueur.\n classes = np.unique(y)\n for cls in classes:\n- mask = y == cls\n+ mask = np.roll(y == cls, 1)\n ax.scatter(\n Z[mask, 0],\n Z[mask, 1],\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "embedding_exact_observation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n3 passed, 63 deselected in 0.90s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "embedding_exact_observation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:47: in test_embedding_exact_observation_associations\n assert_array_equal(offsets(sc), c.Z[c.y == cls])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 41.0 (ACTUAL), 7.0 (DESIRED)\nE [0, 1]: 13.0 (ACTUAL), 31.0 (DESIRED)\nE Max absolute difference among violations: 34.\nE Max relative difference among violations: 4.85714286\nE ACTUAL: array([[41., 13.]])\nE DESIRED: array([[ 7., 31.]])" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F.. [100%]\n================================== FAILURES ===================================\n___________ test_embedding_exact_observation_associations[classes] ____________\ntests\\test_dimred_visualizer.py:47: in test_embedding_exact_observation_associations\n assert_array_equal(offsets(sc), c.Z[c.y == cls])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 41.0 (ACTUAL), 7.0 (DESIRED)\nE [0, 1]: 13.0 (ACTUAL), 31.0 (DESIRED)\nE Max absolute difference among violations: 34.\nE Max relative difference among violations: 4.85714286\nE ACTUAL: array([[41., 13.]])\nE DESIRED: array([[ 7., 31.]])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_embedding_exact_observation_associations[classes]\n1 failed, 2 passed, 63 deselected in 1.03s\n", + "stderr": "" + } + }, + { + "name": "M02_variance_units", + "method": "plot_variance_explained", + "selection": "real_pca_variance", + "changed_lines": [ + 154 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "0026e09d1cd7f509e47cea034e79cdff94c6037a4a7ceaaa50d0b42ae70b7fcf", + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n1 passed, 65 deselected in 2.62s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:119: in test_real_pca_variance_and_reconstruction_energy\n assert_allclose(heights(axes[0]), np.array([9, 4, 1]) / 14 * 100)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.6428571428571428 (ACTUAL), 64.28571428571429 (DESIRED)\nE [1]: 0.2857142857142857 (ACTUAL), 28.57142857142857 (DESIRED)\nE [2]: 0.07142857142857142 (ACTUAL), 7.142857142857142 (DESIRED)\nE Max absolute difference among violations: 63.64285714\nE Max relative difference among violations: 0.99\nE ACTUAL: array([0.642857, 0.285714, 0.071429])\nE DESIRED: array([64.285714, 28.571429, 7.142857])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______________ test_real_pca_variance_and_reconstruction_energy _______________\ntests\\test_dimred_visualizer.py:119: in test_real_pca_variance_and_reconstruction_energy\n assert_allclose(heights(axes[0]), np.array([9, 4, 1]) / 14 * 100)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.6428571428571428 (ACTUAL), 64.28571428571429 (DESIRED)\nE [1]: 0.2857142857142857 (ACTUAL), 28.57142857142857 (DESIRED)\nE [2]: 0.07142857142857142 (ACTUAL), 7.142857142857142 (DESIRED)\nE Max absolute difference among violations: 63.64285714\nE Max relative difference among violations: 0.99\nE ACTUAL: array([0.642857, 0.285714, 0.071429])\nE DESIRED: array([64.285714, 28.571429, 7.142857])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_pca_variance_and_reconstruction_energy\n1 failed, 65 deselected in 2.59s\n", + "stderr": "" + } + }, + { + "name": "M03_best_is_max", + "method": "plot_training_history", + "selection": "training_history_minimum", + "changed_lines": [ + 1048 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "be86a4cc9d42b00927f9f7478ce5938b3f78e432208053698595573184c30360", + "patch": "--- \n+++ \n@@ -1045,7 +1045,7 @@\n ax.plot(epochs, train_loss, color=\"#4C72B0\", lw=2, label=\"Train\")\n ax.plot(epochs, val_loss, color=\"#DD8452\", lw=2, ls=\"--\", label=\"Validation\")\n # Best epoch d\u00e9fini sur la val_loss minimale (crit\u00e8re de s\u00e9lection mod\u00e8le).\n- best_epoch = int(np.argmin(val_loss)) + 1\n+ best_epoch = int(np.argmax(val_loss)) + 1\n best_val = min(val_loss)\n ax.axvline(\n best_epoch,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "training_history_minimum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n2 passed, 64 deselected in 1.25s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "training_history_minimum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:242: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:242: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n____ test_training_history_minimum_is_not_last_and_distinct_series[False] _____\ntests\\test_dimred_visualizer.py:242: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])\n_____ test_training_history_minimum_is_not_last_and_distinct_series[True] _____\ntests\\test_dimred_visualizer.py:242: in test_training_history_minimum_is_not_last_and_distinct_series\n assert_allclose(axes[0].lines[2].get_xdata(), [2, 2])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 1 (ACTUAL), 2 (DESIRED)\nE [1]: 1 (ACTUAL), 2 (DESIRED)\nE Max absolute difference among violations: 1\nE Max relative difference among violations: 0.5\nE ACTUAL: array([1, 1])\nE DESIRED: array([2, 2])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_training_history_minimum_is_not_last_and_distinct_series[False]\nFAILED tests/test_dimred_visualizer.py::test_training_history_minimum_is_not_last_and_distinct_series[True]\n2 failed, 64 deselected in 1.44s\n", + "stderr": "" + } + }, + { + "name": "M04_family_median", + "method": "plot_ae_error_by_family", + "selection": "error_family_mean", + "changed_lines": [ + 2740, + 2742 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "0c1e0f746f1208318c3a41311cf26ca2247439221e86b8fb26a7f94c2d6ca839", + "patch": "--- \n+++ \n@@ -2739,7 +2739,7 @@\n # Agr\u00e9gation par famille pour r\u00e9sum\u00e9 interpr\u00e9table.\n df_fam = (\n df_feat_mse.groupby(\"family\")[\"mse\"]\n- .agg([\"mean\", \"std\", \"count\"])\n+ .agg([\"median\", \"std\", \"count\"]).rename(columns={\"median\": \"mean\"})\n .rename(columns={\"mean\": \"mse_mean\", \"std\": \"mse_std\", \"count\": \"n_feats\"})\n .reset_index()\n .sort_values(\"mse_mean\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "error_family_mean", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n1 passed, 65 deselected in 0.77s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "error_family_mean", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:317: in test_error_family_mean_is_feature_weighted_and_std_is_between_features\n assert_allclose(widths(axes[0]), [2.5, 50 / 3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 2 (50%)\nE Mismatch at index:\nE [1]: 16.0 (ACTUAL), 16.666666666666668 (DESIRED)\nE Max absolute difference among violations: 0.66666667\nE Max relative difference among violations: 0.04\nE ACTUAL: array([ 2.5, 16. ])\nE DESIRED: array([ 2.5 , 16.666667])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n___ test_error_family_mean_is_feature_weighted_and_std_is_between_features ____\ntests\\test_dimred_visualizer.py:317: in test_error_family_mean_is_feature_weighted_and_std_is_between_features\n assert_allclose(widths(axes[0]), [2.5, 50 / 3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 2 (50%)\nE Mismatch at index:\nE [1]: 16.0 (ACTUAL), 16.666666666666668 (DESIRED)\nE Max absolute difference among violations: 0.66666667\nE Max relative difference among violations: 0.04\nE ACTUAL: array([ 2.5, 16. ])\nE DESIRED: array([ 2.5 , 16.666667])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_error_family_mean_is_feature_weighted_and_std_is_between_features\n1 failed, 65 deselected in 0.92s\n", + "stderr": "" + } + }, + { + "name": "M05_ae_as_pca", + "method": "plot_ae_vs_pca", + "selection": "ae_pca_comparison", + "changed_lines": [ + 1235, + 1236 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "4490d68bd49df52e8e3e33fcd3f3deb6afafc15b43d98456789b3a77da97d69c", + "patch": "--- \n+++ \n@@ -1233,7 +1233,7 @@\n for _, row in ae_df.iterrows():\n # Chaque AE est repr\u00e9sent\u00e9 par une ligne horizontale de performance.\n ax.axhline(\n- row[\"mse_mean\"], color=\"#DD8452\", ls=\"--\", lw=2, label=row[\"method\"]\n+ pca_df[\"mse_mean\"].iloc[0], color=\"#DD8452\", ls=\"--\", lw=2, label=row[\"method\"]\n )\n ax.annotate(\n # Position d'annotation choisie pour rester lisible sur la courbe PCA.\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "ae_pca_comparison", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n1 passed, 65 deselected in 0.72s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "ae_pca_comparison", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:277: in test_ae_pca_comparison_does_not_substitute_metrics\n assert_allclose(ax.lines[1].get_ydata(), [0.17, 0.17])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE [1]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE Max absolute difference among violations: 0.73\nE Max relative difference among violations: 4.29411765\nE ACTUAL: array([0.9, 0.9])\nE DESIRED: array([0.17, 0.17])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_____________ test_ae_pca_comparison_does_not_substitute_metrics ______________\ntests\\test_dimred_visualizer.py:277: in test_ae_pca_comparison_does_not_substitute_metrics\n assert_allclose(ax.lines[1].get_ydata(), [0.17, 0.17])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE [1]: 0.9 (ACTUAL), 0.17 (DESIRED)\nE Max absolute difference among violations: 0.73\nE Max relative difference among violations: 4.29411765\nE ACTUAL: array([0.9, 0.9])\nE DESIRED: array([0.17, 0.17])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_ae_pca_comparison_does_not_substitute_metrics\n1 failed, 65 deselected in 0.93s\n", + "stderr": "" + } + }, + { + "name": "M06_identity_reconstruction", + "method": "plot_ae_reconstruction", + "selection": "reconstruction_drawn_rows", + "changed_lines": [ + 1182 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "9d374b178f5f5ea7f05df0b08d34b31f12680c59bb26223a5818b649832fa9f4", + "patch": "--- \n+++ \n@@ -1179,7 +1179,7 @@\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n- recon = X_recon[si]\n+ recon = X[si]\n mse_i = float(np.mean((orig - recon) ** 2))\n ax.plot(x_pos, orig, color=\"#4C72B0\", lw=1.5, alpha=0.9, label=\"Original\")\n ax.plot(\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n3 passed, 63 deselected in 1.14s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:258: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 11.0 (ACTUAL), 12.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 4.0 (DESIRED)\nE Max absolute difference among violations: 2.\nE Max relative difference among violations: 0.5\nE ACTUAL: array([11., 2.])\nE DESIRED: array([12., 4.])" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:258: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 25.0 (DESIRED)\nE [1]: 43.0 (ACTUAL), 55.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.24\nE ACTUAL: array([19., 43.])\nE DESIRED: array([25., 55.])" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:258: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 3.0 (ACTUAL), 5.0 (DESIRED)\nE [1]: 17.0 (ACTUAL), 21.0 (DESIRED)\nE Max absolute difference among violations: 4.\nE Max relative difference among violations: 0.4\nE ACTUAL: array([ 3., 17.])\nE DESIRED: array([ 5., 21.])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFF [100%]\n================================== FAILURES ===================================\n______________ test_reconstruction_drawn_rows_and_manual_mse[1] _______________\ntests\\test_dimred_visualizer.py:258: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 11.0 (ACTUAL), 12.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 4.0 (DESIRED)\nE Max absolute difference among violations: 2.\nE Max relative difference among violations: 0.5\nE ACTUAL: array([11., 2.])\nE DESIRED: array([12., 4.])\n______________ test_reconstruction_drawn_rows_and_manual_mse[3] _______________\ntests\\test_dimred_visualizer.py:258: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 25.0 (DESIRED)\nE [1]: 43.0 (ACTUAL), 55.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.24\nE ACTUAL: array([19., 43.])\nE DESIRED: array([25., 55.])\n______________ test_reconstruction_drawn_rows_and_manual_mse[6] _______________\ntests\\test_dimred_visualizer.py:258: in test_reconstruction_drawn_rows_and_manual_mse\n assert_array_equal(ax.lines[1].get_ydata(), recon[row])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0]: 3.0 (ACTUAL), 5.0 (DESIRED)\nE [1]: 17.0 (ACTUAL), 21.0 (DESIRED)\nE Max absolute difference among violations: 4.\nE Max relative difference among violations: 0.4\nE ACTUAL: array([ 3., 17.])\nE DESIRED: array([ 5., 21.])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_reconstruction_drawn_rows_and_manual_mse[1]\nFAILED tests/test_dimred_visualizer.py::test_reconstruction_drawn_rows_and_manual_mse[3]\nFAILED tests/test_dimred_visualizer.py::test_reconstruction_drawn_rows_and_manual_mse[6]\n3 failed, 63 deselected in 1.36s\n", + "stderr": "" + } + }, + { + "name": "M07_hr_color_roll", + "method": "plot_hr_diagram_embedding", + "selection": "hr_finite_triplets", + "changed_lines": [ + 920, + 923 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "9747542c8f796dcfe2334714186a9d2f1f6a2e0de7604ec1c1feb5eddbce86b4", + "patch": "--- \n+++ \n@@ -920,7 +920,7 @@\n sc = ax.scatter(\n teff[valid],\n logg[valid],\n- c=z_coord[valid],\n+ c=np.roll(z_coord[valid], 1),\n cmap=self.cmap_continuous,\n s=2,\n alpha=0.5,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "hr_finite_triplets", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 907, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n2 passed, 64 deselected in 1.05s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "hr_finite_triplets", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:97: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 11.0 (DESIRED)\nE [1]: 11.0 (ACTUAL), 23.0 (DESIRED)\nE [2]: 23.0 (ACTUAL), 19.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.72727273\nE ACTUAL: MaskedArray([19., 11., 23.])\nE DESIRED: array([11., 23., 19.])" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:97: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 43.0 (ACTUAL), 2.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 5.0 (DESIRED)\nE [2]: 5.0 (ACTUAL), 43.0 (DESIRED)\nE Max absolute difference among violations: 41.\nE Max relative difference among violations: 20.5\nE ACTUAL: MaskedArray([43., 2., 5.])\nE DESIRED: array([ 2., 5., 43.])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 907, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________________ test_hr_finite_triplets_and_physical_axes[0] _________________\ntests\\test_dimred_visualizer.py:97: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 19.0 (ACTUAL), 11.0 (DESIRED)\nE [1]: 11.0 (ACTUAL), 23.0 (DESIRED)\nE [2]: 23.0 (ACTUAL), 19.0 (DESIRED)\nE Max absolute difference among violations: 12.\nE Max relative difference among violations: 0.72727273\nE ACTUAL: MaskedArray([19., 11., 23.])\nE DESIRED: array([11., 23., 19.])\n________________ test_hr_finite_triplets_and_physical_axes[1] _________________\ntests\\test_dimred_visualizer.py:97: in test_hr_finite_triplets_and_physical_axes\n assert_array_equal(ax.collections[0].get_array(), Z[[0, 2, 5], axis])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 43.0 (ACTUAL), 2.0 (DESIRED)\nE [1]: 2.0 (ACTUAL), 5.0 (DESIRED)\nE [2]: 5.0 (ACTUAL), 43.0 (DESIRED)\nE Max absolute difference among violations: 41.\nE Max relative difference among violations: 20.5\nE ACTUAL: MaskedArray([43., 2., 5.])\nE DESIRED: array([ 2., 5., 43.])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_hr_finite_triplets_and_physical_axes[0]\nFAILED tests/test_dimred_visualizer.py::test_hr_finite_triplets_and_physical_axes[1]\n2 failed, 64 deselected in 1.23s\n", + "stderr": "" + } + }, + { + "name": "M08_cluster_colors", + "method": "plot_hdbscan_clusters", + "selection": "real_analyzer_state", + "changed_lines": [ + 1390, + 1393 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "4c7322cb7de655cb5ea317a71b8cec2ec4de336c2e1866b9f78c378a3ae00a1b", + "patch": "--- \n+++ \n@@ -1390,7 +1390,7 @@\n ax.scatter(\n Z[mask, 0],\n Z[mask, 1],\n- c=[color_map[cid]],\n+ c=[color_map[cluster_ids[-1]]],\n s=2,\n alpha=0.75,\n rasterized=True,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n3 passed, 63 deselected in 1.10s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_analyzer_state", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:401: in test_hdbscan_real_analyzer_state_and_point_populations\n assert_allclose(sc.get_facecolors()[0, :3], hdb.color_map_[cid][:3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F.. [100%]\n================================== FAILURES ===================================\n_______ test_hdbscan_real_analyzer_state_and_point_populations[labels0] _______\ntests\\test_dimred_visualizer.py:401: in test_hdbscan_real_analyzer_state_and_point_populations\n assert_allclose(sc.get_facecolors()[0, :3], hdb.color_map_[cid][:3])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 3 / 3 (100%)\nE Mismatch at indices:\nE [0]: 0.4796 (ACTUAL), 0.18995 (DESIRED)\nE [1]: 0.01583 (ACTUAL), 0.07176 (DESIRED)\nE [2]: 0.01055 (ACTUAL), 0.23217 (DESIRED)\nE Max absolute difference among violations: 0.28965\nE Max relative difference among violations: 1.52487497\nE ACTUAL: array([0.4796 , 0.01583, 0.01055])\nE DESIRED: array([0.18995, 0.07176, 0.23217])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_hdbscan_real_analyzer_state_and_point_populations[labels0]\n1 failed, 2 passed, 63 deselected in 1.25s\n", + "stderr": "" + } + }, + { + "name": "M09_tsne_as_umap", + "method": "plot_trustworthiness", + "selection": "real_sklearn_trustworthiness", + "changed_lines": [ + 2244 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "219f76a998ddc435edb3c68374e089462acdda0d735e2384192c4c04d16aab75", + "patch": "--- \n+++ \n@@ -2241,7 +2241,7 @@\n with warnings.catch_warnings():\n warnings.simplefilter(\"ignore\")\n tu = trustworthiness(X_sub, Zu_sub, n_neighbors=k, metric=\"euclidean\")\n- tt = trustworthiness(X_sub, Zt_sub, n_neighbors=k, metric=\"euclidean\")\n+ tt = trustworthiness(X_sub, Zu_sub, n_neighbors=k, metric=\"euclidean\")\n # Stocke T(k) pour les deux m\u00e9thodes afin de tracer la courbe comparative.\n trust_u.append(tu)\n trust_t.append(tt)\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n2 passed, 64 deselected in 2.80s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_sklearn_trustworthiness", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:594: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 24 / 24 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -1.14005850694597 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 0.8518760376374508 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: -0.9468537822225308 (ACTUAL), -0.6451940968015629 (DESIRED)\nE [1, 1]: -0.2999476978380483 (ACTUAL), 0.0825255266666682 (DESIRED)\nE [2, 0]: 0.7540394717615756 (ACTUAL), -0.11873997633083841 (DESIRED)\nE Max absolute difference among violations: 3.39499489\nE Max relative difference among violations: 13.23342732\nE ACTUAL: array([[-1.140059, 0.851876],\nE [-0.946854, -0.299948],\nE [ 0.754039, 1.994789],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-0.645194, 0.082526],\nE [-0.11874 , -1.400206],..." + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:594: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 18 / 18 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -1.14005850694597 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 0.8518760376374508 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: -1.215555026777933 (ACTUAL), -1.0861640144823521 (DESIRED)\nE [1, 1]: 0.13882201829008786 (ACTUAL), -0.5693158913378338 (DESIRED)\nE [2, 0]: -0.13429338949088465 (ACTUAL), -1.215555026777933 (DESIRED)\nE Max absolute difference among violations: 3.39499489\nE Max relative difference among violations: 7.48292869\nE ACTUAL: array([[-1.140059, 0.851876],\nE [-1.215555, 0.138822],\nE [-0.134293, 1.177617],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-1.086164, -0.569316],\nE [-1.215555, 0.138822],..." + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[12] ________\ntests\\test_dimred_visualizer.py:594: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 24 / 24 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -1.14005850694597 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 0.8518760376374508 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: -0.9468537822225308 (ACTUAL), -0.6451940968015629 (DESIRED)\nE [1, 1]: -0.2999476978380483 (ACTUAL), 0.0825255266666682 (DESIRED)\nE [2, 0]: 0.7540394717615756 (ACTUAL), -0.11873997633083841 (DESIRED)\nE Max absolute difference among violations: 3.39499489\nE Max relative difference among violations: 13.23342732\nE ACTUAL: array([[-1.140059, 0.851876],\nE [-0.946854, -0.299948],\nE [ 0.754039, 1.994789],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-0.645194, 0.082526],\nE [-0.11874 , -1.400206],...\n________ test_real_sklearn_trustworthiness_independent_rank_oracle[9] _________\ntests\\test_dimred_visualizer.py:594: in test_real_sklearn_trustworthiness_independent_rank_oracle\n assert_array_equal(embedding, (X if i % 2 == 0 else bad)[indices])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 18 / 18 (100%)\nE First 5 mismatches are at indices:\nE [0, 0]: -1.14005850694597 (ACTUAL), 0.7540394717615756 (DESIRED)\nE [0, 1]: 0.8518760376374508 (ACTUAL), 1.9947886386434426 (DESIRED)\nE [1, 0]: -1.215555026777933 (ACTUAL), -1.0861640144823521 (DESIRED)\nE [1, 1]: 0.13882201829008786 (ACTUAL), -0.5693158913378338 (DESIRED)\nE [2, 0]: -0.13429338949088465 (ACTUAL), -1.215555026777933 (DESIRED)\nE Max absolute difference among violations: 3.39499489\nE Max relative difference among violations: 7.48292869\nE ACTUAL: array([[-1.140059, 0.851876],\nE [-1.215555, 0.138822],\nE [-0.134293, 1.177617],...\nE DESIRED: array([[ 0.754039, 1.994789],\nE [-1.086164, -0.569316],\nE [-1.215555, 0.138822],...\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[12]\nFAILED tests/test_dimred_visualizer.py::test_real_sklearn_trustworthiness_independent_rank_oracle[9]\n2 failed, 64 deselected in 2.95s\n", + "stderr": "" + } + }, + { + "name": "M10_confidence_constant", + "method": "plot_xgboost_umap", + "selection": "xgboost_classes_confidence", + "changed_lines": [ + 2095, + 2098 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "f1bb69629105b2443c7a96086390fc68bde21d1e395b2ea7129ac0dae024f231", + "patch": "--- \n+++ \n@@ -2095,7 +2095,7 @@\n sc = ax.scatter(\n Z_umap_aligned[:, 0],\n Z_umap_aligned[:, 1],\n- c=confidence,\n+ c=np.ones(len(confidence)),\n cmap=\"RdYlGn\",\n vmin=0.4,\n vmax=1.0,\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n2 passed, 64 deselected in 0.98s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "xgboost_classes_confidence", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:522: in test_xgboost_classes_confidence_and_cluster_associations\n assert_array_equal(axes[1].collections[0].get_array(), confidence)\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 6 / 6 (100%)\nE First 5 mismatches are at indices:\nE [0]: 1.0 (ACTUAL), 0.45 (DESIRED)\nE [1]: 1.0 (ACTUAL), 0.7 (DESIRED)\nE [2]: 1.0 (ACTUAL), 0.95 (DESIRED)\nE [3]: 1.0 (ACTUAL), 0.6 (DESIRED)\nE [4]: 1.0 (ACTUAL), 0.8 (DESIRED)\nE Max absolute difference among violations: 0.55\nE Max relative difference among violations: 1.22222222\nE ACTUAL: MaskedArray([1., 1., 1., 1., 1., 1.])\nE DESIRED: array([0.45, 0.7 , 0.95, 0.6 , 0.8 , 0.5 ])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".F [100%]\n================================== FAILURES ===================================\n____ test_xgboost_classes_confidence_and_cluster_associations[confidence1] ____\ntests\\test_dimred_visualizer.py:522: in test_xgboost_classes_confidence_and_cluster_associations\n assert_array_equal(axes[1].collections[0].get_array(), confidence)\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 6 / 6 (100%)\nE First 5 mismatches are at indices:\nE [0]: 1.0 (ACTUAL), 0.45 (DESIRED)\nE [1]: 1.0 (ACTUAL), 0.7 (DESIRED)\nE [2]: 1.0 (ACTUAL), 0.95 (DESIRED)\nE [3]: 1.0 (ACTUAL), 0.6 (DESIRED)\nE [4]: 1.0 (ACTUAL), 0.8 (DESIRED)\nE Max absolute difference among violations: 0.55\nE Max relative difference among violations: 1.22222222\nE ACTUAL: MaskedArray([1., 1., 1., 1., 1., 1.])\nE DESIRED: array([0.45, 0.7 , 0.95, 0.6 , 0.8 , 0.5 ])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_xgboost_classes_confidence_and_cluster_associations[confidence1]\n1 failed, 1 passed, 64 deselected in 1.14s\n", + "stderr": "" + } + }, + { + "name": "M11_synthesis_ae_as_pca", + "method": "plot_synthesis_grid", + "selection": "synthesis_preserves", + "changed_lines": [ + 2887 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "4f007fdb7dcae0839188918aad4eb9f77662409d9c1413989ff8d3ddeed36082", + "patch": "--- \n+++ \n@@ -2884,7 +2884,7 @@\n if Z_umap is not None:\n # UMAP est optionnel selon le notebook ex\u00e9cut\u00e9.\n METHODS.append((\"UMAP\", Z_umap, \"UMAP 1\", \"UMAP 2\"))\n- METHODS.append((\"Autoencodeur\", Z_ae, \"Latent 1\", \"Latent 2\"))\n+ METHODS.append((\"Autoencodeur\", scores_pca, \"Latent 1\", \"Latent 2\"))\n \n PARAMS = [\n (\"Classe spectrale\", None, None),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n2 passed, 64 deselected in 0.94s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "synthesis_preserves", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:666: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:666: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[False] ___\ntests\\test_dimred_visualizer.py:666: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])\n___ test_synthesis_preserves_distinct_geometries_and_physical_colors[True] ____\ntests\\test_dimred_visualizer.py:666: in test_synthesis_preserves_distinct_geometries_and_physical_colors\n assert_array_equal(offsets(sc), Z[c.y == sc.get_label()])\nE AssertionError: \nE Arrays are not equal\nE \nE Mismatched elements: 2 / 2 (100%)\nE Mismatch at indices:\nE [0, 0]: 14.0 (ACTUAL), 107.0 (DESIRED)\nE [0, 1]: 93.0 (ACTUAL), 131.0 (DESIRED)\nE Max absolute difference among violations: 93.\nE Max relative difference among violations: 0.86915888\nE ACTUAL: array([[14., 93.]])\nE DESIRED: array([[107., 131.]])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]\nFAILED tests/test_dimred_visualizer.py::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]\n2 failed, 64 deselected in 1.17s\n", + "stderr": "" + } + }, + { + "name": "M12_stability_median", + "method": "plot_stability", + "selection": "stability_producer", + "changed_lines": [ + 740, + 744 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "c521e47969b0df802a97ecf521f45fca1a471bac3804187362b0ac01038a728f", + "patch": "--- \n+++ \n@@ -741,7 +741,7 @@\n 0.98,\n 0.97,\n # Convention actuelle: on exclut souvent seed de r\u00e9f\u00e9rence (index 0) de la moyenne.\n- f\"Moyenne : {dists[1:].mean():.4f}\" if len(dists) > 1 else \"\",\n+ f\"Moyenne : {np.median(dists[1:]):.4f}\" if len(dists) > 1 else \"\",\n transform=ax.transAxes,\n ha=\"right\",\n va=\"top\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "stability_producer", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n1 passed, 65 deselected in 1.09s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "stability_producer", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:636: in test_stability_producer_order_and_mean_without_reference\n assert f\"{expected:.4f}\" in text(ax)\nE assert '0.0120' in 'Moyenne : 0.0057'\nE + where 'Moyenne : 0.0057' = text()" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n__________ test_stability_producer_order_and_mean_without_reference ___________\ntests\\test_dimred_visualizer.py:636: in test_stability_producer_order_and_mean_without_reference\n assert f\"{expected:.4f}\" in text(ax)\nE assert '0.0120' in 'Moyenne : 0.0057'\nE + where 'Moyenne : 0.0057' = text()\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_stability_producer_order_and_mean_without_reference\n1 failed, 65 deselected in 1.24s\n", + "stderr": "" + } + }, + { + "name": "M13_profile_sign_erased", + "method": "plot_hdbscan_feature_profiles", + "selection": "profiles_signed_top", + "changed_lines": [ + 2026 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "91e32e38df5eeff868d93e08f22bde30dfd975fd423fe2b1a239a738d636a7cc", + "patch": "--- \n+++ \n@@ -2023,7 +2023,7 @@\n profile = cluster_means.loc[cid]\n # Top-5 par amplitude absolue (exc\u00e8s ou d\u00e9ficit).\n top5 = profile.abs().nlargest(5).index.tolist()\n- vals = profile[top5].values\n+ vals = np.abs(profile[top5].values)\n colors = [\"#C0392B\" if v > 0 else \"#2980B9\" for v in vals]\n labels = [\n f.replace(\"feature_\", \"\").replace(\"_eq_width\", \"\\nEW\")[:14]\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "profiles_signed_top", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n1 passed, 65 deselected in 0.74s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "profiles_signed_top", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:493: in test_cluster_profiles_signed_top_five_not_first_five\n assert_allclose(widths(axes[0]), [2, 0.9, -0.6, 0.4, -0.1])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 5 (40%)\nE Mismatch at indices:\nE [2]: 0.6 (ACTUAL), -0.6 (DESIRED)\nE [4]: 0.1 (ACTUAL), -0.1 (DESIRED)\nE Max absolute difference among violations: 1.2\nE Max relative difference among violations: 2.\nE ACTUAL: array([2. , 0.9, 0.6, 0.4, 0.1])\nE DESIRED: array([ 2. , 0.9, -0.6, 0.4, -0.1])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_cluster_profiles_signed_top_five_not_first_five _____________\ntests\\test_dimred_visualizer.py:493: in test_cluster_profiles_signed_top_five_not_first_five\n assert_allclose(widths(axes[0]), [2, 0.9, -0.6, 0.4, -0.1])\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 2 / 5 (40%)\nE Mismatch at indices:\nE [2]: 0.6 (ACTUAL), -0.6 (DESIRED)\nE [4]: 0.1 (ACTUAL), -0.1 (DESIRED)\nE Max absolute difference among violations: 1.2\nE Max relative difference among violations: 2.\nE ACTUAL: array([2. , 0.9, 0.6, 0.4, 0.1])\nE DESIRED: array([ 2. , 0.9, -0.6, 0.4, -0.1])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_cluster_profiles_signed_top_five_not_first_five\n1 failed, 65 deselected in 0.91s\n", + "stderr": "" + } + }, + { + "name": "M14_density_wrong_population", + "method": "plot_ae_error_distribution", + "selection": "histogram_densities", + "changed_lines": [ + 1324, + 1329 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "d5407d955fea773baff307002def63203823044aaeb4696dac2eed4d256b0523", + "patch": "--- \n+++ \n@@ -1326,7 +1326,7 @@\n bins=60,\n alpha=0.55,\n color=color,\n- density=True,\n+ density=False,\n label=f\"{cls} (n={mask.sum()}, \u03bc={vals.mean():.4f})\",\n )\n # M\u00e9diane trac\u00e9e pour robuste comparaison inter-classes.\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "histogram_densities", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n1 passed, 65 deselected in 1.51s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "histogram_densities", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:359: in test_histogram_densities_integrate_and_class_mean_median_are_distinct\n assert_allclose(sum(p.get_width() * p.get_height() for p in container), 1)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98333333\nE Max relative difference among violations: 0.98333333\nE ACTUAL: array(0.016667)\nE DESIRED: array(1)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____ test_histogram_densities_integrate_and_class_mean_median_are_distinct ____\ntests\\test_dimred_visualizer.py:359: in test_histogram_densities_integrate_and_class_mean_median_are_distinct\n assert_allclose(sum(p.get_width() * p.get_height() for p in container), 1)\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE \nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.98333333\nE Max relative difference among violations: 0.98333333\nE ACTUAL: array(0.016667)\nE DESIRED: array(1)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_histogram_densities_integrate_and_class_mean_median_are_distinct\n1 failed, 65 deselected in 1.03s\n", + "stderr": "" + } + }, + { + "name": "M15_kde_wrong_population", + "method": "plot_latent_kde", + "selection": "real_kde_reproducible", + "changed_lines": [ + 2401 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "91bfc71fabb5fb950157bfc2ac827c4aab3d866ca76c10d44bbf20516aa17911", + "patch": "--- \n+++ \n@@ -2398,7 +2398,7 @@\n from scipy.stats import gaussian_kde\n \n # KDE restreint \u00e0 la population stellaire pour une lecture astrophysique propre.\n- star_mask = y == \"STAR\"\n+ star_mask = np.ones(len(y), dtype=bool)\n Z_stars = Z_ae[star_mask]\n teff_s = (\n meta[\"teff_gspphot\"].values[star_mask].astype(float)\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n1 passed, 65 deselected in 2.35s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:735: in test_real_kde_reproducible_star_selection_and_observation_colors\n assert len(actual) == 119\nE assert 139 == 119\nE + where 139 = len(array([[ 1.46143263e+00, 5.04194549e-01],\\n [-1.58198440e-01, -4.02871589e-01],\\n [-5.12655840e-01, 8.0166....62051618e-01, -1.22073795e+00],\\n [-2.43641605e-01, -8.00208551e-01],\\n [-1.00969481e+00, 6.69136452e-01]]))" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_real_kde_reproducible_star_selection_and_observation_colors _______\ntests\\test_dimred_visualizer.py:735: in test_real_kde_reproducible_star_selection_and_observation_colors\n assert len(actual) == 119\nE assert 139 == 119\nE + where 139 = len(array([[ 1.46143263e+00, 5.04194549e-01],\\n [-1.58198440e-01, -4.02871589e-01],\\n [-5.12655840e-01, 8.0166....62051618e-01, -1.22073795e+00],\\n [-2.43641605e-01, -8.00208551e-01],\\n [-1.00969481e+00, 6.69136452e-01]]))\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_kde_reproducible_star_selection_and_observation_colors\n1 failed, 65 deselected in 2.45s\n", + "stderr": "" + } + }, + { + "name": "M16_export_blank_figure", + "method": "_save", + "selection": "real_export_readable", + "changed_lines": [ + 1018 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "c686947be404c32bf911a0cff410356af8ec385c229db14da4dc8ed8823359f1", + "patch": "--- \n+++ \n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ plt.figure().savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n2 passed, 64 deselected in 1.16s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:688: in test_real_export_readable_and_same_semantic_figure\n assert pixels.shape[0] > 100 and pixels.std() > 1\nE assert (250 > 100 and np.float64(0.0) > 1)\nE + where np.float64(0.0) = ()\nE + where = array([[[255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255],\\n ...,\\n [255, 255, 255],\\n ... ...,\\n [255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255]]], shape=(250, 330, 3), dtype=uint8).std" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F. [100%]\n================================== FAILURES ===================================\n___________ test_real_export_readable_and_same_semantic_figure[png] ___________\ntests\\test_dimred_visualizer.py:688: in test_real_export_readable_and_same_semantic_figure\n assert pixels.shape[0] > 100 and pixels.std() > 1\nE assert (250 > 100 and np.float64(0.0) > 1)\nE + where np.float64(0.0) = ()\nE + where = array([[[255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255],\\n ...,\\n [255, 255, 255],\\n ... ...,\\n [255, 255, 255],\\n [255, 255, 255],\\n [255, 255, 255]]], shape=(250, 330, 3), dtype=uint8).std\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_real_export_readable_and_same_semantic_figure[png]\n1 failed, 1 passed, 64 deselected in 1.05s\n", + "stderr": "" + } + } + ], + "executed_files_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/proofs_dimred_visualizer.py": "2ece4074314b52b26994bb1593e941e6b008e21d70dbc8de7b89d7fd6a3937fd", + "tests/visualizer_review_contracts.py": "4e1ed42f2f5039a859acd5dd35802be0b67fe1389f2d5e445470d090e9a4f07a", + "tests/test_visualizer_review_contracts.py": "ef4205ff44a5e3a80faa19fab29acbacc895a7712b9a14559eab7fd6ff285ea2" + }, + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_disclosure_identifies_the_relevant_exclusion_bound", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_localized_numbers_and_population_suffixes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_variance_claims_use_numbers_and_component_meaning", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[vertical]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[horizontal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_denominators_and_claims_are_distinguishable", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ".................................................................. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-0m0ifkge\\result.xml -\n66 passed in 20.54s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_r3_original_controls_results.json b/audit/m28_r3_original_controls_results.json new file mode 100644 index 0000000..b3406c7 --- /dev/null +++ b/audit/m28_r3_original_controls_results.json @@ -0,0 +1,9944 @@ +{ + "active_head": "e924f36f24412a435f5ca54a95cdfad914835ff2", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6" + }, + "mode": "proofs", + "runs": [ + { + "name": "C14_renderable_mathtext", + "method": "plot_eigenspectra", + "selection": "default_eigenspectrum", + "changed_lines": [ + 869, + 872 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "b3ea1715d05ad316ba907994cf51f603855f85e89009b7cc151e980a76481c6f", + "patch": "--- \n+++ \n@@ -869,7 +869,7 @@\n ax.text(\n lam,\n ymax * 0.88,\n- nom,\n+ nom.replace(chr(92)*2, chr(92)),\n rotation=90,\n fontsize=6,\n color=\"crimson\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_eigenspectrum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:445: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:450: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:445: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:450: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\n1 failed, 91 deselected in 1.89s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "default_eigenspectrum", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n1 passed, 91 deselected in 0.98s\n", + "stderr": "" + } + }, + { + "name": "C01_equivalent_percent", + "method": "plot_variance_explained", + "selection": "real_pca_variance", + "changed_lines": [ + 154 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "8b74921a093af4f83f08890f592c4c0952217b3b46be509081ed8d56a050a69e", + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, 100 * ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n1 passed, 91 deselected in 2.91s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n1 passed, 91 deselected in 2.98s\n", + "stderr": "" + } + }, + { + "name": "C02_alternative_export", + "method": "_save", + "selection": "real_export_readable", + "changed_lines": [ + 1018 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "95ac85f7fbb81f0932ea60d4962a8d00b3eae4d5c2b4148589e17266f2a9d953", + "patch": "--- \n+++ \n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ fig.canvas.print_figure(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n2 passed, 90 deselected in 1.30s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "real_export_readable", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 541, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1009, + 1017, + 1018, + 1019, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n2 passed, 90 deselected in 1.20s\n", + "stderr": "" + } + }, + { + "name": "C03_alternative_palette", + "method": "plot_loadings_bar", + "selection": "signed_loadings", + "changed_lines": [ + 288 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c8833a129a116501b3ba962a48791953da763ac97fcf1c87d41ade0e8e6994f4", + "patch": "--- \n+++ \n@@ -285,7 +285,7 @@\n df = df.sort_values(\"loading\")\n \n # Couleur encodant le signe physique de la contribution.\n- colors = [\"#DD8452\" if v < 0 else \"#4C72B0\" for v in df[\"loading\"]]\n+ colors = [\"#CC5500\" if v < 0 else \"#0055CC\" for v in df[\"loading\"]]\n fig, ax = plt.subplots(figsize=(8, max(4, n_top * 0.35)), dpi=self.dpi)\n \n ax.barh(\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "signed_loadings", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n1 passed, 91 deselected in 0.92s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "signed_loadings", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n1 passed, 91 deselected in 0.90s\n", + "stderr": "" + } + }, + { + "name": "C04_explicit_alignment_refusal", + "method": "plot_ae_recon_by_spectral_type", + "selection": "reconstruction_cardinality", + "changed_lines": [ + 2536, + 2537, + 2538 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "7e93d1ce3f02ab35d08218ceb54010b192f74840f324818bf3788f4e7c52dfc4", + "patch": "--- \n+++ \n@@ -2533,6 +2533,8 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ if not (len(X) == len(X_recon) == len(spectral_types)):\n+ raise RuntimeError(\"Observation alignment: incompatible lengths\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\n1 failed, 91 deselected in 0.84s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2537, + 2674, + 2679, + 2680, + 2803, + 2807, + 2865, + 2871, + 2872, + 2985, + 2988 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n1 passed, 91 deselected in 0.63s\n", + "stderr": "" + } + }, + { + "name": "C05_gravity_units", + "method": "plot_hr_teff_regions", + "selection": "hr_region_vertices", + "changed_lines": [ + 3039, + 3057 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "552acec69a5400440601692a3036f2dfff766b4b46643f0d66fcc879c98696b7", + "patch": "--- \n+++ \n@@ -3054,7 +3054,7 @@\n MS_G_HOT + (MS_G_COOL - MS_G_HOT) * 0.35,\n ),\n (T_LO + (T_HI - T_LO) * 0.25, MS_G_COOL - 0.10),\n- (T_LO + T_PAD, G_HI - T_PAD * 2),\n+ (T_LO + T_PAD, G_HI - G_PAD * 2),\n (T_LO + T_PAD, G_HI - G_PAD),\n (T_LO + (T_HI - T_LO) * 0.20, MS_G_COOL + MS_W * 0.6),\n (\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 91 deselected in 1.15s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n1 passed, 91 deselected in 1.01s\n", + "stderr": "" + } + }, + { + "name": "C06_count_omitted", + "method": "plot_hr_teff_regions", + "selection": "hr_population_title", + "changed_lines": [ + 3213, + 3215 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "ed1ffd93182289c0629f048ccb0acfbb0860b292a686da314b2682e25ff8bc3d", + "patch": "--- \n+++ \n@@ -3212,7 +3212,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 population fournie\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x000001E2EC24C200>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x000001E32E4BF220>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x000001E2EC24C200>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x000001E32E4BF220>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\n2 failed, 90 deselected in 1.32s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n2 passed, 90 deselected in 1.14s\n", + "stderr": "" + } + }, + { + "name": "C07_small_errors_retained", + "method": "plot_ae_error_distribution_logscale", + "selection": "log_histogram_keeps", + "changed_lines": [ + 2823, + 2824 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "fc96d6a64f3b0e40da6bf7c8e281e7e7a0134e037c22c97456ffc5ee5fd55cdc", + "patch": "--- \n+++ \n@@ -2821,7 +2821,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(max(vals.min(), np.finfo(float).tiny)), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\n1 failed, 91 deselected in 1.46s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n1 passed, 91 deselected in 1.31s\n", + "stderr": "" + } + }, + { + "name": "C08_scalar_axes_supported", + "method": "plot_ae_embedding", + "selection": "no_physical_columns and plot_ae_embedding", + "changed_lines": [ + 1112, + 1113 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "9c7bb5270f973d9ab2eed8f781d84cbee44d923aa5b2d0d39a80a92d9a9400bb", + "patch": "--- \n+++ \n@@ -1109,6 +1109,7 @@\n \n PALETTE = {\"STAR\": \"#4C72B0\", \"GALAXY\": \"#DD8452\", \"QSO\": \"#55A868\"}\n MARKERS = {\"STAR\": \"o\", \"GALAXY\": \"s\", \"QSO\": \"^\"}\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_ae_embedding", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:277: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:277: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\n1 failed, 91 deselected in 0.87s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_ae_embedding", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1115, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1126, + 1128, + 1129, + 1130, + 1131, + 1133, + 1155, + 1156, + 1157, + 1158, + 1160, + 1161, + 1164, + 1166, + 1167, + 1217, + 1257, + 1262, + 1263, + 1264, + 1316, + 1353, + 1358, + 1472, + 1477, + 1598, + 1601, + 1602, + 1603, + 1640, + 1645, + 1773, + 1778, + 1779, + 1953, + 1957, + 1958, + 2004, + 2008, + 2009, + 2056, + 2063, + 2163, + 2167, + 2215, + 2220, + 2221, + 2222, + 2289, + 2294, + 2391, + 2396, + 2528, + 2534, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n1 passed, 91 deselected in 0.69s\n", + "stderr": "" + } + }, + { + "name": "C09_zoom_scalar_axes_supported", + "method": "plot_latent_zoomed", + "selection": "no_physical_columns and plot_latent_zoomed", + "changed_lines": [ + 2321, + 2322 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c3d12005048a8d692f607a4977148b4a708dcf18f570cbdb4bd3bf710e6347fa", + "patch": "--- \n+++ \n@@ -2318,6 +2318,7 @@\n ]\n \n fig, axes = plt.subplots(1, 1 + len(available), figsize=(22, 5), dpi=self.dpi)\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_latent_zoomed", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:278: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:278: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\n1 failed, 91 deselected in 0.85s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "no_physical_columns and plot_latent_zoomed", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2324, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2335, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2343, + 2345, + 2381, + 2382, + 2384, + 2385, + 2387, + 2388, + 2389, + 2391, + 2396, + 2528, + 2534, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n1 passed, 91 deselected in 0.70s\n", + "stderr": "" + } + }, + { + "name": "C10_profile_single_slot", + "method": "plot_hdbscan_feature_profiles", + "selection": "cluster_profiles_unavailable and 1", + "changed_lines": [ + 2020 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "e56d76446680544910180a2a4f1e5d99b53d58361a1fff7f4980a2113d7c0ffb", + "patch": "--- \n+++ \n@@ -2017,7 +2017,7 @@\n ncols = 4\n nrows = (n_show + ncols - 1) // ncols\n fig, axes = plt.subplots(nrows, ncols, figsize=(5 * ncols, 4 * nrows), dpi=120)\n- axes_flat = axes.flatten() if n_show > 1 else [axes]\n+ axes_flat = np.asarray(axes).ravel()\n \n for ax_i, cid in zip(axes_flat, top_cids):\n profile = cluster_means.loc[cid]\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_profiles_unavailable and 1", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:298: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:297: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:298: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:297: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\n1 failed, 91 deselected in 0.88s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_profiles_unavailable and 1", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n1 passed, 91 deselected in 0.71s\n", + "stderr": "" + } + }, + { + "name": "C11_display_whole_trust_range", + "method": "plot_trustworthiness", + "selection": "trustworthiness_axis_contains", + "changed_lines": [ + 2279 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "ad1c94878e026d9ddc675825313ec1ed5709f1128675e1fe1487f0c7310149fc", + "patch": "--- \n+++ \n@@ -2276,7 +2276,7 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0, 1.01)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:329: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:329: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\n1 failed, 91 deselected in 2.69s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "trustworthiness_axis_contains", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n1 passed, 91 deselected in 2.26s\n", + "stderr": "" + } + }, + { + "name": "C12_hide_unused_reconstructions", + "method": "plot_ae_reconstruction", + "selection": "more_reconstructions or reconstruction_drawn_rows", + "changed_lines": [ + 1179, + 1180, + 1181 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "c80b84e92e07174091bbdc7418f60720c07530d8c68d7023c1a3961ee09beac6", + "patch": "--- \n+++ \n@@ -1176,6 +1176,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in axes[len(idx):]:\n+ unused.set_visible(False)\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions or reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "...F [100%]\n================================== FAILURES ===================================\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n1 failed, 3 passed, 88 deselected in 1.46s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "more_reconstructions or reconstruction_drawn_rows", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1180, + 1181, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1196, + 1197, + 1198, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1210, + 1212, + 1213, + 1216, + 1218, + 1258, + 1263, + 1264, + 1265, + 1317, + 1354, + 1359, + 1473, + 1478, + 1599, + 1602, + 1603, + 1604, + 1641, + 1646, + 1774, + 1779, + 1780, + 1954, + 1958, + 1959, + 2005, + 2009, + 2010, + 2057, + 2064, + 2164, + 2168, + 2216, + 2221, + 2222, + 2223, + 2290, + 2295, + 2392, + 2397, + 2529, + 2535, + 2674, + 2679, + 2680, + 2803, + 2807, + 2865, + 2871, + 2872, + 2985, + 2988 + ], + "stdout": ".... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n4 passed, 88 deselected in 1.25s\n", + "stderr": "" + } + }, + { + "name": "F01_always_refuse_alignment", + "method": "plot_ae_recon_by_spectral_type", + "selection": "reconstruction_cardinality or spectral_type_means", + "changed_lines": [ + 2536, + 2537 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "e0e0abae314f5e5eb2996177d79dd93ed57a2e3f751236cfc0d37a00e3a0b195", + "patch": "--- \n+++ \n@@ -2533,6 +2533,7 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ raise RuntimeError(\"Observation alignment unavailable\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality or spectral_type_means", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".F [100%]\n================================== FAILURES ===================================\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\n1 failed, 1 passed, 90 deselected in 0.90s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "reconstruction_cardinality or spectral_type_means", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "FAILURE", + "message": "tests\\test_dimred_visualizer.py:333: in test_spectral_type_means_for_aligned_unequal_classes\n result = c.viz.plot_ae_recon_by_spectral_type(\nsrc\\dimred\\dimred_visualizer.py:2536: in plot_ae_recon_by_spectral_type\n raise RuntimeError(\"Observation alignment unavailable\")\nE RuntimeError: Observation alignment unavailable\n\nDuring handling of the above exception, another exception occurred:\ntests\\test_dimred_visualizer.py:337: in test_spectral_type_means_for_aligned_unequal_classes\n assert False, f\"Valid aligned reconstruction must remain usable: {exc}\"\nE AssertionError: Valid aligned reconstruction must remain usable: Observation alignment unavailable\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2536, + 2673, + 2678, + 2679, + 2802, + 2806, + 2864, + 2870, + 2871, + 2984, + 2987 + ], + "stdout": "F. [100%]\n================================== FAILURES ===================================\n____________ test_spectral_type_means_for_aligned_unequal_classes _____________\ntests\\test_dimred_visualizer.py:333: in test_spectral_type_means_for_aligned_unequal_classes\n result = c.viz.plot_ae_recon_by_spectral_type(\nsrc\\dimred\\dimred_visualizer.py:2536: in plot_ae_recon_by_spectral_type\n raise RuntimeError(\"Observation alignment unavailable\")\nE RuntimeError: Observation alignment unavailable\n\nDuring handling of the above exception, another exception occurred:\ntests\\test_dimred_visualizer.py:337: in test_spectral_type_means_for_aligned_unequal_classes\n assert False, f\"Valid aligned reconstruction must remain usable: {exc}\"\nE AssertionError: Valid aligned reconstruction must remain usable: Observation alignment unavailable\nE assert False\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/test_dimred_visualizer.py::test_spectral_type_means_for_aligned_unequal_classes\n1 failed, 1 passed, 90 deselected in 0.84s\n", + "stderr": "" + } + }, + { + "name": "F02_empty_hr", + "method": "plot_hr_teff_regions", + "selection": "hr_region_vertices", + "changed_lines": [ + 3160, + 3161 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "6bd35b2de52d08c61471145b27b92596e95f09e2266dd9e394fed28562632d61", + "patch": "--- \n+++ \n@@ -3157,6 +3157,7 @@\n cbar.ax.tick_params(labelsize=9)\n \n # \u2500\u2500 R\u00e9gions stellaires \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n+ REGIONS = []\n for region in REGIONS:\n patch = MplPolygon(\n np.array(region[\"poly\"]),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 91 deselected in 1.14s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_region_vertices", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:193: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert ax.patches, \"Valid HR regional figure must contain informative regions\"\nE AssertionError: Valid HR regional figure must contain informative regions\nE assert \nE + where = .patches" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3200, + 3204, + 3205, + 3206, + 3207, + 3209, + 3210, + 3212, + 3213, + 3214, + 3215, + 3217, + 3218, + 3220, + 3221, + 3223, + 3224 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:193: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert ax.patches, \"Valid HR regional figure must contain informative regions\"\nE AssertionError: Valid HR regional figure must contain informative regions\nE assert \nE + where = .patches\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n1 failed, 91 deselected in 1.11s\n", + "stderr": "" + } + }, + { + "name": "C13_integrated_kde_mass", + "method": "plot_latent_kde", + "selection": "kde_labeled_regions or real_kde_reproducible", + "changed_lines": [ + 2427, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443 + ], + "reached": true, + "same_collection": true, + "classification": "PASS", + "candidate_lf_sha256": "302fe10399fed0e6d61b3108c8095e46ad1f329d40eba152223be16efb5e5020", + "patch": "--- \n+++ \n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered) / ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass, p)]) for p in [.68, .95, .99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions or real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 1 passed, 86 deselected in 16.96s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions or real_kde_reproducible", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "...... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n6 passed, 86 deselected in 27.43s\n", + "stderr": "" + } + }, + { + "name": "F03_normal_thresholds_for_every_kde", + "method": "plot_latent_kde", + "selection": "kde_labeled_regions", + "changed_lines": [ + 2433, + 2434, + 2435 + ], + "reached": true, + "same_collection": true, + "classification": "KILLED", + "candidate_lf_sha256": "a4009e917c5151559ea5006b33f0465c7f5ca163cfec14c0d5f29f3755c56b0b", + "patch": "--- \n+++ \n@@ -2430,24 +2430,7 @@\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ levels = [(1-p)/(2*np.pi) for p in [.99, .95, .68]]\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "original": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 87 deselected in 16.36s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.04626727\nE Max relative difference among violations: 0.04673462\nE ACTUAL: array(0.943733)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.04998785\nE Max relative difference among violations: 0.05049278\nE ACTUAL: array(0.940012)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02752703\nE Max relative difference among violations: 0.02780508\nE ACTUAL: array(0.962473)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02209737\nE Max relative difference among violations: 0.02232058\nE ACTUAL: array(0.967903)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02727094\nE Max relative difference among violations: 0.0275464\nE ACTUAL: array(0.962729)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2435, + 2436, + 2437, + 2438, + 2440, + 2441, + 2442, + 2443, + 2446, + 2447, + 2448, + 2450, + 2451, + 2452, + 2454, + 2455, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2467, + 2468, + 2470, + 2471, + 2473, + 2474, + 2476, + 2478, + 2479, + 2480, + 2481, + 2482, + 2483, + 2484, + 2485, + 2486, + 2487, + 2488, + 2489, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2502, + 2503, + 2504, + 2506, + 2507, + 2508, + 2510, + 2516, + 2655, + 2660, + 2661, + 2784, + 2788, + 2846, + 2852, + 2853, + 2966, + 2969 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.04626727\nE Max relative difference among violations: 0.04673462\nE ACTUAL: array(0.943733)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.04998785\nE Max relative difference among violations: 0.05049278\nE ACTUAL: array(0.940012)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02752703\nE Max relative difference among violations: 0.02780508\nE ACTUAL: array(0.962473)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02209737\nE Max relative difference among violations: 0.02232058\nE ACTUAL: array(0.967903)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.02727094\nE Max relative difference among violations: 0.0275464\nE ACTUAL: array(0.962729)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 87 deselected in 16.17s\n", + "stderr": "" + } + } + ], + "executed_files_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/proofs_dimred_visualizer.py": "2ece4074314b52b26994bb1593e941e6b008e21d70dbc8de7b89d7fd6a3937fd", + "tests/visualizer_review_contracts.py": "a8add777477f11103850247cf348b3e5ff5e31faa1aaa932953645d3c3475a81", + "tests/test_visualizer_review_contracts.py": "1398f78f67090f47ed09f57bb0d12d1f49d7abfa781e57e39c5a4f50f251bbea" + }, + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x000002E8A73B9B60>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x000002E8AD5B97E0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:265: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000002E8A72DB840>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:277: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:278: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:298: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:297: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:306: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:377: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1518/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1518/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:329: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:445: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:450: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:236: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1199, + 1200, + 1201, + 1202, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FFFFFFFFFFFFFFF.FFFFFFFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x000002E8A73B9B60>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x000002E8AD5B97E0>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:409: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:265: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000002E8A72DB840>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:277: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:278: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:298: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:297: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:306: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:377: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1518/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1518/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:329: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:445: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:450: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:236: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ek1s3x25\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n25 failed, 1 passed in 23.32s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_r3_reverse_results.json b/audit/m28_r3_reverse_results.json new file mode 100644 index 0000000..817dc05 --- /dev/null +++ b/audit/m28_r3_reverse_results.json @@ -0,0 +1,2426 @@ +{ + "active_head": "e924f36f24412a435f5ca54a95cdfad914835ff2", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6" + }, + "mode": "reverse", + "runs": [], + "executed_files_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/proofs_dimred_visualizer.py": "2ece4074314b52b26994bb1593e941e6b008e21d70dbc8de7b89d7fd6a3937fd", + "tests/visualizer_review_contracts.py": "a8add777477f11103850247cf348b3e5ff5e31faa1aaa932953645d3c3475a81", + "tests/test_visualizer_review_contracts.py": "1398f78f67090f47ed09f57bb0d12d1f49d7abfa781e57e39c5a4f50f251bbea" + }, + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_visualizer_review_contracts::test_histogram_denominators_and_claims_are_distinguishable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[horizontal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[vertical]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_variance_claims_use_numbers_and_component_meaning", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_localized_numbers_and_population_suffixes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_disclosure_identifies_the_relevant_exclusion_bound", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": ".................................................................. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-odjprhcw\\result.xml -\n66 passed in 17.13s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_r3_targeted_initial_results.json b/audit/m28_r3_targeted_initial_results.json new file mode 100644 index 0000000..cff2f61 --- /dev/null +++ b/audit/m28_r3_targeted_initial_results.json @@ -0,0 +1,13441 @@ +{ + "active_head": "e924f36f24412a435f5ca54a95cdfad914835ff2", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "working_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/proofs_dimred_visualizer.py": "2ece4074314b52b26994bb1593e941e6b008e21d70dbc8de7b89d7fd6a3937fd", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "4e1ed42f2f5039a859acd5dd35802be0b67fe1389f2d5e445470d090e9a4f07a", + "tests/test_visualizer_review_contracts.py": "ef4205ff44a5e3a80faa19fab29acbacc895a7712b9a14559eab7fd6ff285ea2" + }, + "proofs_ref": null, + "runner_lf_sha256": "aff0521e27ee6136da0b8851f904cc3eb5a8953fb0b67968858bee9590ace436", + "runs": [ + { + "name": "K10", + "selection": "kde_labeled_regions", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2424 + ], + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ] + ], + "patch": "--- \n+++ \n@@ -2421,33 +2421,24 @@\n # Sous-\u00e9chantillon pour stabiliser le co\u00fbt de la KDE.\n idx = rng.choice(len(Z_stars), N_KDE, replace=False)\n logger.info(\"Calcul KDE sur %d \u00e9toiles...\", N_KDE)\n- kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n+ kde = gaussian_kde(Z_stars[idx][Z_stars[idx][:,0]<3].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "8ab9d01ffd73e4273dcf25acede88db6e3794d8fc8d5d963519cd0a77c449768", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n5 passed, 87 deselected in 24.42s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.1\nE Fitted STAR sample excludes or overrepresents a stellar mode\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3\nE Max relative difference among violations: 1.\nE ACTUAL: array(0.)\nE DESIRED: array(0.3)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.1\nE Fitted STAR sample excludes or overrepresents a stellar mode\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3\nE Max relative difference among violations: 1.\nE ACTUAL: array(0.)\nE DESIRED: array(0.3)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.1\nE Fitted STAR sample excludes or overrepresents a stellar mode\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3\nE Max relative difference among violations: 1.\nE ACTUAL: array(0.)\nE DESIRED: array(0.3)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "..FFF [100%]\n================================== FAILURES ===================================\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.1\nE Fitted STAR sample excludes or overrepresents a stellar mode\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3\nE Max relative difference among violations: 1.\nE ACTUAL: array(0.)\nE DESIRED: array(0.3)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.1\nE Fitted STAR sample excludes or overrepresents a stellar mode\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3\nE Max relative difference among violations: 1.\nE ACTUAL: array(0.)\nE DESIRED: array(0.3)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:113: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.1\nE Fitted STAR sample excludes or overrepresents a stellar mode\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.3\nE Max relative difference among violations: 1.\nE ACTUAL: array(0.)\nE DESIRED: array(0.3)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n3 failed, 2 passed, 87 deselected in 9.63s\n", + "stderr": "" + } + }, + { + "name": "K11", + "selection": "kde_labeled_regions", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2424 + ], + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ] + ], + "patch": "--- \n+++ \n@@ -2421,33 +2421,24 @@\n # Sous-\u00e9chantillon pour stabiliser le co\u00fbt de la KDE.\n idx = rng.choice(len(Z_stars), N_KDE, replace=False)\n logger.info(\"Calcul KDE sur %d \u00e9toiles...\", N_KDE)\n- kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n+ kde = gaussian_kde(Z_stars[idx[:max(3,len(idx)//2)]].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n", + "candidate_sha256": "15a1ba5506bf85d608c2a94bf4851e67480ea9d02c0eb08d946314914e699807", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\n5 failed, 87 deselected in 15.64s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "kde_labeled_regions", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2663, + 2668, + 2669, + 2792, + 2796, + 2854, + 2860, + 2861, + 2974, + 2977 + ], + "stdout": "..... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n5 passed, 87 deselected in 14.51s\n", + "stderr": "" + } + }, + { + "name": "FD05", + "selection": "cluster_colorbar", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1420 + ], + [ + 1564 + ] + ], + "patch": "--- \n+++ \n@@ -1418,7 +1418,7 @@\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n plt.colorbar(\n- sm, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n+ sm, ax=ax, fraction=0.035, pad=0.02, label=\"Groupe HDBSCAN\"\n ).ax.tick_params(labelsize=8)\n ax.text(\n 0.02,\n@@ -1562,7 +1562,7 @@\n )\n sm2.set_array([])\n plt.colorbar(\n- sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n+ sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Groupe HDBSCAN\"\n ).ax.tick_params(labelsize=8)\n \n ax2 = axes[1]\n", + "candidate_sha256": "d6a22497392a50245afff60a54ddb64d4005e114f758f93034a1139964fa13c6", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1359, + 1360, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1371, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1386, + 1387, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1414, + 1415, + 1417, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1426, + 1427, + 1428, + 1429, + 1430, + 1432, + 1433, + 1434, + 1435, + 1437, + 1440, + 1441, + 1442, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1455, + 1456, + 1457, + 1458, + 1460, + 1461, + 1462, + 1463, + 1464, + 1466, + 1467, + 1468, + 1470, + 1475, + 1478, + 1481, + 1482, + 1483, + 1484, + 1485, + 1487, + 1488, + 1493, + 1494, + 1495, + 1498, + 1499, + 1501, + 1502, + 1504, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1516, + 1517, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1529, + 1530, + 1531, + 1532, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1558, + 1559, + 1560, + 1562, + 1563, + 1564, + 1565, + 1567, + 1568, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1582, + 1583, + 1584, + 1585, + 1587, + 1588, + 1589, + 1590, + 1592, + 1593, + 1594, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n2 passed, 90 deselected in 1.21s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:390: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:390: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:390: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:390: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n2 failed, 90 deselected in 1.38s\n", + "stderr": "" + } + }, + { + "name": "FD05_H", + "selection": "cluster_colorbar", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1420 + ], + [ + 1564 + ] + ], + "patch": "--- \n+++ \n@@ -1418,7 +1418,7 @@\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n plt.colorbar(\n- sm, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n+ sm, ax=ax, fraction=0.035, pad=0.02, label=\"Groupe HDBSCAN\", orientation=\"horizontal\"\n ).ax.tick_params(labelsize=8)\n ax.text(\n 0.02,\n@@ -1562,7 +1562,7 @@\n )\n sm2.set_array([])\n plt.colorbar(\n- sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n+ sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Groupe HDBSCAN\", orientation=\"horizontal\"\n ).ax.tick_params(labelsize=8)\n \n ax2 = axes[1]\n", + "candidate_sha256": "4138261e0a35f2c1d648592aa07055eea7ccbde18759ff55ee11c374b028b92e", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1359, + 1360, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1371, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1386, + 1387, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1414, + 1415, + 1417, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1426, + 1427, + 1428, + 1429, + 1430, + 1432, + 1433, + 1434, + 1435, + 1437, + 1440, + 1441, + 1442, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1455, + 1456, + 1457, + 1458, + 1460, + 1461, + 1462, + 1463, + 1464, + 1466, + 1467, + 1468, + 1470, + 1475, + 1478, + 1481, + 1482, + 1483, + 1484, + 1485, + 1487, + 1488, + 1493, + 1494, + 1495, + 1498, + 1499, + 1501, + 1502, + 1504, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1516, + 1517, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1529, + 1530, + 1531, + 1532, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1558, + 1559, + 1560, + 1562, + 1563, + 1564, + 1565, + 1567, + 1568, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1582, + 1583, + 1584, + 1585, + 1587, + 1588, + 1589, + 1590, + 1592, + 1593, + 1594, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n2 passed, 90 deselected in 1.19s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:390: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:390: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:390: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:390: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n2 failed, 90 deselected in 1.37s\n", + "stderr": "" + } + }, + { + "name": "AC05_H", + "selection": "cluster_colorbar", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1415 + ], + [ + 1420 + ], + [ + 1560 + ], + [ + 1564 + ] + ], + "patch": "--- \n+++ \n@@ -1413,12 +1413,12 @@\n ),\n )\n sm = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n plt.colorbar(\n- sm, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n+ sm, ax=ax, fraction=0.035, pad=0.02, label=\"Groupe HDBSCAN\", orientation=\"horizontal\"\n ).ax.tick_params(labelsize=8)\n ax.text(\n 0.02,\n@@ -1558,11 +1558,11 @@\n )\n ax.grid(True, alpha=0.2)\n sm2 = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm2.set_array([])\n plt.colorbar(\n- sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n+ sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Groupe HDBSCAN\", orientation=\"horizontal\"\n ).ax.tick_params(labelsize=8)\n \n ax2 = axes[1]\n", + "candidate_sha256": "8a4e7935b811a1274c0ab9191ab3686e67d1abe234347469c7ad629f4f798f03", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:390: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:390: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:390: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:390: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n2 failed, 90 deselected in 1.41s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n2 passed, 90 deselected in 1.19s\n", + "stderr": "" + } + }, + { + "name": "AD05_ANN", + "selection": "cluster_colorbar", + "admissible": true, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 1420 + ], + [ + 1562 + ] + ], + "patch": "--- \n+++ \n@@ -1417,9 +1417,7 @@\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n- plt.colorbar(\n- sm, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n- ).ax.tick_params(labelsize=8)\n+ pass # Categorical annotations remain authoritative.\n ax.text(\n 0.02,\n 0.98,\n@@ -1561,9 +1559,7 @@\n cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n )\n sm2.set_array([])\n- plt.colorbar(\n- sm2, ax=ax, fraction=0.035, pad=0.02, label=\"Cluster ID\"\n- ).ax.tick_params(labelsize=8)\n+ pass # Categorical annotations remain authoritative.\n \n ax2 = axes[1]\n valid_teff = np.isfinite(teff)\n", + "candidate_sha256": "8fee561d954413cac9c3697481181a851c479f3d67b0507ba123b558bb92c836", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:390: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:390: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:390: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:390: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n2 failed, 90 deselected in 1.39s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "cluster_colorbar", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:388: in assert_cluster_encoding\n assert choices, f\"No faithful ID/color encoding for C{cid}\"\n ^^^^^^^\nE AssertionError: No faithful ID/color encoding for C2" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1425, + 1426, + 1427, + 1428, + 1429, + 1431, + 1432, + 1433, + 1434, + 1436, + 1439, + 1440, + 1441, + 1443, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1454, + 1455, + 1456, + 1457, + 1459, + 1460, + 1461, + 1462, + 1463, + 1465, + 1466, + 1467, + 1469, + 1474, + 1477, + 1480, + 1481, + 1482, + 1483, + 1484, + 1486, + 1487, + 1492, + 1493, + 1494, + 1497, + 1498, + 1500, + 1501, + 1503, + 1505, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1515, + 1516, + 1518, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1528, + 1529, + 1530, + 1531, + 1548, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1557, + 1558, + 1559, + 1561, + 1562, + 1564, + 1565, + 1567, + 1568, + 1569, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1579, + 1580, + 1581, + 1582, + 1584, + 1585, + 1586, + 1587, + 1589, + 1590, + 1591, + 1593, + 1596, + 1597, + 1598, + 1635, + 1640, + 1768, + 1773, + 1774, + 1948, + 1952, + 1953, + 1999, + 2003, + 2004, + 2051, + 2058, + 2158, + 2162, + 2210, + 2215, + 2216, + 2217, + 2284, + 2289, + 2386, + 2391, + 2523, + 2529, + 2668, + 2673, + 2674, + 2797, + 2801, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".F [100%]\n================================== FAILURES ===================================\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:388: in assert_cluster_encoding\n assert choices, f\"No faithful ID/color encoding for C{cid}\"\n ^^^^^^^\nE AssertionError: No faithful ID/color encoding for C2\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\n1 failed, 1 passed, 90 deselected in 1.29s\n", + "stderr": "" + } + }, + { + "name": "FD03_K", + "selection": "hr_population_title", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 3213 + ] + ], + "patch": "--- \n+++ \n@@ -3212,7 +3212,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 \u2248 43k \u00e9toiles\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "candidate_sha256": "8fa2822212ead8f9d2aa3c7510bf5b7d62d7e3c49a7fc304f69c055eda286121", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982, + 2995, + 2996, + 2997, + 2999, + 3000, + 3004, + 3005, + 3006, + 3011, + 3012, + 3013, + 3014, + 3016, + 3017, + 3026, + 3027, + 3028, + 3031, + 3034, + 3035, + 3037, + 3038, + 3039, + 3040, + 3041, + 3042, + 3043, + 3044, + 3046, + 3047, + 3048, + 3049, + 3050, + 3052, + 3053, + 3054, + 3055, + 3056, + 3057, + 3058, + 3060, + 3064, + 3065, + 3066, + 3067, + 3068, + 3069, + 3070, + 3071, + 3073, + 3074, + 3075, + 3076, + 3077, + 3078, + 3082, + 3083, + 3084, + 3085, + 3086, + 3087, + 3088, + 3089, + 3091, + 3092, + 3093, + 3094, + 3095, + 3096, + 3097, + 3101, + 3102, + 3103, + 3104, + 3105, + 3106, + 3107, + 3108, + 3110, + 3111, + 3112, + 3113, + 3114, + 3115, + 3116, + 3122, + 3125, + 3138, + 3139, + 3140, + 3141, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3151, + 3152, + 3153, + 3156, + 3157, + 3158, + 3159, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3167, + 3168, + 3169, + 3170, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3184, + 3185, + 3186, + 3187, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3199, + 3200, + 3201, + 3202, + 3204, + 3205, + 3207, + 3208, + 3209, + 3210, + 3212, + 3213, + 3215, + 3216, + 3218, + 3219 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n2 passed, 90 deselected in 1.14s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "hr_population_title", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 \u2248 43k \u00e9toiles\nE assert (not [43000.0] or False)\nE + where False = all(. at 0x0000020191B7C120>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 \u2248 43k \u00e9toiles\nE assert (not [43000.0] or False)\nE + where False = all(. at 0x00000201D3DCB300>)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 \u2248 43k \u00e9toiles\nE assert (not [43000.0] or False)\nE + where False = all(. at 0x0000020191B7C120>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 \u2248 43k \u00e9toiles\nE assert (not [43000.0] or False)\nE + where False = all(. at 0x00000201D3DCB300>)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\n2 failed, 90 deselected in 1.30s\n", + "stderr": "" + } + }, + { + "name": "FVAR_COMPONENT", + "selection": "truncated_variance_annotation", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 185 + ] + ], + "patch": "--- \n+++ \n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"{n_thresh} composantes \u2192 {cumvar[idx]*100:.1f} %\".replace(\".\",\",\"),\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n", + "candidate_sha256": "1e19e91a846687321cc9a69bc5b6b94eb025b970daa6b3bd993c81c662bd8d88", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "truncated_variance_annotation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n1 passed, 91 deselected in 0.77s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "truncated_variance_annotation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\n1 failed, 91 deselected in 0.91s\n", + "stderr": "" + } + }, + { + "name": "A_VARIANCE", + "selection": "truncated_variance_annotation or real_pca_variance", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 185 + ] + ], + "patch": "--- \n+++ \n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"{n_thresh} composantes \u2192 {pca_analyzer.explained_variance_ratio[:n_thresh].sum()*100:.1f} %\".replace(\".\",\",\"),\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n", + "candidate_sha256": "23784ba7a75d05fe3fa9f4b0c139038c8f7fc88c587ca496697dab372656cae8", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "truncated_variance_annotation or real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".F [100%]\n================================== FAILURES ===================================\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\n1 failed, 1 passed, 90 deselected in 3.55s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "truncated_variance_annotation or real_pca_variance", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n2 passed, 90 deselected in 3.25s\n", + "stderr": "" + } + }, + { + "name": "AD_COMMA", + "selection": "linear_histogram_truncation or log_histogram_keeps", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2834, + 2835, + 2836 + ] + ], + "patch": "--- \n+++ \n@@ -2831,6 +2831,9 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls} : {missing} exclues sur {len(vals)}, observations tronqu\u00e9es hors support {bins[0]:.6f} \u00e0 {bins[-1]:.6f}\".replace(\".\",\",\"),transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n", + "candidate_sha256": "bd572e62ce168ca96047e135efc376b3f7d1169935ff4b293814ec9070fcd46f", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation or log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:231: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "FF [100%]\n================================== FAILURES ===================================\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:231: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n2 failed, 90 deselected in 1.86s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation or log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2846, + 2847, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2858, + 2859, + 2860, + 2862, + 2863, + 2864, + 2866, + 2872, + 2873, + 2986, + 2989 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n2 passed, 90 deselected in 1.76s\n", + "stderr": "" + } + }, + { + "name": "FD_COMMA_BOUND", + "selection": "linear_histogram_truncation or log_histogram_keeps", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2834, + 2835, + 2836 + ] + ], + "patch": "--- \n+++ \n@@ -2831,6 +2831,9 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls} : {missing} exclues sur {len(vals)}, observations tronqu\u00e9es hors support {bins[0]:.6f} \u00e0 {bins[-1]+.05:.6f}\".replace(\".\",\",\"),transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n", + "candidate_sha256": "9716df0cc0f83199f138b855c186cd07d9692d6e5e4490fa6774cf0c83739175", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation or log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ".. [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n2 passed, 90 deselected in 1.78s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation or log_histogram_keeps", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:231: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2846, + 2847, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2858, + 2859, + 2860, + 2862, + 2863, + 2864, + 2866, + 2872, + 2873, + 2986, + 2989 + ], + "stdout": ".F [100%]\n================================== FAILURES ===================================\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:231: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n1 failed, 1 passed, 90 deselected in 2.05s\n", + "stderr": "" + } + }, + { + "name": "A_TOTAL", + "selection": "linear_histogram_truncation", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2834, + 2835, + 2836, + 2837 + ], + [ + 2838 + ] + ], + "patch": "--- \n+++ \n@@ -2831,12 +2831,16 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ hist_kwargs = dict(density=True)\n+ if xscale == \"linear\":\n+ hist_kwargs = dict(density=False,weights=np.full(len(vals),1/(len(vals)*np.diff(bins)[0])))\n+ ax.text(.03,.12,f\"{cls}: density normalized by total {len(vals)}, support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n alpha=0.55,\n color=color,\n- density=True,\n+ **hist_kwargs,\n label=f\"{cls} m\u00e9diane={med:.3f}\",\n )\n # Marqueur central robuste pour chaque classe.\n", + "candidate_sha256": "6aca5f7f9faff6bf5cc64cb5d7d19b7719f3d85a08b735c46af0ad427ca53338", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:231: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:231: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n1 failed, 91 deselected in 1.45s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2847, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2854, + 2856, + 2857, + 2858, + 2859, + 2860, + 2861, + 2863, + 2864, + 2865, + 2867, + 2873, + 2874, + 2987, + 2990 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n1 passed, 91 deselected in 1.30s\n", + "stderr": "" + } + }, + { + "name": "F_TOTAL_LIE", + "selection": "linear_histogram_truncation", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2834, + 2835, + 2836, + 2837 + ], + [ + 2838 + ] + ], + "patch": "--- \n+++ \n@@ -2831,12 +2831,16 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ hist_kwargs = dict(density=True)\n+ if xscale == \"linear\":\n+ hist_kwargs = dict(density=True,weights=np.full(len(vals),1/(len(vals)*np.diff(bins)[0])))\n+ ax.text(.03,.12,f\"{cls}: density normalized by total {len(vals)}, support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n alpha=0.55,\n color=color,\n- density=True,\n+ **hist_kwargs,\n label=f\"{cls} m\u00e9diane={med:.3f}\",\n )\n # Marqueur central robuste pour chaque classe.\n", + "candidate_sha256": "a5c70cd0399d925e8b24162a115e05a8aab82e7d4270d899b7fb5e1c7245f3ca", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n1 passed, 91 deselected in 1.32s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:215: in assert_histogram_representation\n missing, edges = assert_histogram_population(call, expected, convention)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests\\visualizer_review_contracts.py:187: in assert_histogram_population\n assert_allclose(plotted, reference, atol=1e-10, rtol=1e-10)\nE AssertionError: \nE Not equal to tolerance rtol=1e-10, atol=1e-10\nE \nE Mismatched elements: 3 / 59 (5.08%)\nE Mismatch at indices:\nE [15]: 132.30182755914328 (ACTUAL), 7.938109653548597 (DESIRED)\nE [35]: 132.30182755914402 (ACTUAL), 7.938109653548641 (DESIRED)\nE [39]: 132.30182755914328 (ACTUAL), 7.938109653548597 (DESIRED)\nE Max absolute difference among violations: 124.36371791\nE Max relative difference among violations: 15.66666667\nE ACTUAL: array([ 0. , 0. , 0. , 0. , 0. ,\nE 0. , 0. , 0. , 0. , 0. ,\nE 0. , 0. , 0. , 0. , 0. ,...\nE DESIRED: array([0. , 0. , 0. , 0. , 0. , 0. , 0. ,\nE 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\nE 0. , 7.93811, 0. , 0. , 0. , 0. , 0. ,..." + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2847, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2854, + 2856, + 2857, + 2858, + 2859, + 2860, + 2861, + 2863, + 2864, + 2865, + 2867, + 2873, + 2874, + 2987, + 2990 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:215: in assert_histogram_representation\n missing, edges = assert_histogram_population(call, expected, convention)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests\\visualizer_review_contracts.py:187: in assert_histogram_population\n assert_allclose(plotted, reference, atol=1e-10, rtol=1e-10)\nE AssertionError: \nE Not equal to tolerance rtol=1e-10, atol=1e-10\nE \nE Mismatched elements: 3 / 59 (5.08%)\nE Mismatch at indices:\nE [15]: 132.30182755914328 (ACTUAL), 7.938109653548597 (DESIRED)\nE [35]: 132.30182755914402 (ACTUAL), 7.938109653548641 (DESIRED)\nE [39]: 132.30182755914328 (ACTUAL), 7.938109653548597 (DESIRED)\nE Max absolute difference among violations: 124.36371791\nE Max relative difference among violations: 15.66666667\nE ACTUAL: array([ 0. , 0. , 0. , 0. , 0. ,\nE 0. , 0. , 0. , 0. , 0. ,\nE 0. , 0. , 0. , 0. , 0. ,...\nE DESIRED: array([0. , 0. , 0. , 0. , 0. , 0. , 0. ,\nE 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\nE 0. , 7.93811, 0. , 0. , 0. , 0. , 0. ,...\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n1 failed, 91 deselected in 1.46s\n", + "stderr": "" + } + }, + { + "name": "F_CONDITIONAL_LIE", + "selection": "linear_histogram_truncation", + "admissible": false, + "classification": "KILLED", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 2834, + 2835, + 2836, + 2837 + ], + [ + 2838 + ] + ], + "patch": "--- \n+++ \n@@ -2831,12 +2831,16 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ hist_kwargs = dict(density=True)\n+ if xscale == \"linear\":\n+ hist_kwargs = dict(density=False,weights=np.full(len(vals),1/(len(vals)*np.diff(bins)[0])))\n+ ax.text(.03,.12,f\"{cls}: conditional density\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n alpha=0.55,\n color=color,\n- density=True,\n+ **hist_kwargs,\n label=f\"{cls} m\u00e9diane={med:.3f}\",\n )\n # Marqueur central robuste pour chaque classe.\n", + "candidate_sha256": "4d8d1843608d9525c6e0f0f388963b87de83b0cb321a8f31fc6bdb4ada9d35aa", + "baseline_kind": "admissible joint control", + "baseline_source_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1090, + 1164, + 1165, + 1217, + 1255, + 1260, + 1261, + 1262, + 1314, + 1351, + 1356, + 1470, + 1475, + 1596, + 1599, + 1600, + 1601, + 1638, + 1643, + 1771, + 1776, + 1777, + 1951, + 1955, + 1956, + 2002, + 2006, + 2007, + 2054, + 2061, + 2161, + 2165, + 2213, + 2218, + 2219, + 2220, + 2287, + 2292, + 2390, + 2395, + 2518, + 2524, + 2665, + 2670, + 2671, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2859, + 2865, + 2866, + 2979, + 2982 + ], + "stdout": ". [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n1 passed, 91 deselected in 1.32s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "linear_histogram_truncation", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:215: in assert_histogram_representation\n missing, edges = assert_histogram_population(call, expected, convention)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests\\visualizer_review_contracts.py:187: in assert_histogram_population\n assert_allclose(plotted, reference, atol=1e-10, rtol=1e-10)\nE AssertionError: \nE Not equal to tolerance rtol=1e-10, atol=1e-10\nE \nE Mismatched elements: 3 / 59 (5.08%)\nE Mismatch at indices:\nE [15]: 7.938109653548604 (ACTUAL), 1.0 (DESIRED)\nE [35]: 7.938109653548604 (ACTUAL), 1.0 (DESIRED)\nE [39]: 7.938109653548604 (ACTUAL), 1.0 (DESIRED)\nE Max absolute difference among violations: 6.93810965\nE Max relative difference among violations: 6.93810965\nE ACTUAL: array([0. , 0. , 0. , 0. , 0. , 0. , 0. ,\nE 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\nE 0. , 7.93811, 0. , 0. , 0. , 0. , 0. ,...\nE DESIRED: array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,\nE 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\nE 0., 1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\nE 0., 0., 0., 0., 0., 0., 0., 0.])" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 121, + 124, + 125, + 126, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1092, + 1165, + 1166, + 1216, + 1256, + 1261, + 1262, + 1263, + 1315, + 1352, + 1357, + 1471, + 1476, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2055, + 2062, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2288, + 2293, + 2390, + 2395, + 2527, + 2533, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2847, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2854, + 2856, + 2857, + 2858, + 2859, + 2860, + 2861, + 2863, + 2864, + 2865, + 2867, + 2873, + 2874, + 2987, + 2990 + ], + "stdout": "F [100%]\n================================== FAILURES ===================================\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:215: in assert_histogram_representation\n missing, edges = assert_histogram_population(call, expected, convention)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests\\visualizer_review_contracts.py:187: in assert_histogram_population\n assert_allclose(plotted, reference, atol=1e-10, rtol=1e-10)\nE AssertionError: \nE Not equal to tolerance rtol=1e-10, atol=1e-10\nE \nE Mismatched elements: 3 / 59 (5.08%)\nE Mismatch at indices:\nE [15]: 7.938109653548604 (ACTUAL), 1.0 (DESIRED)\nE [35]: 7.938109653548604 (ACTUAL), 1.0 (DESIRED)\nE [39]: 7.938109653548604 (ACTUAL), 1.0 (DESIRED)\nE Max absolute difference among violations: 6.93810965\nE Max relative difference among violations: 6.93810965\nE ACTUAL: array([0. , 0. , 0. , 0. , 0. , 0. , 0. ,\nE 0. , 0. , 0. , 0. , 0. , 0. , 0. ,\nE 0. , 7.93811, 0. , 0. , 0. , 0. , 0. ,...\nE DESIRED: array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,\nE 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\nE 0., 1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\nE 0., 0., 0., 0., 0., 0., 0., 0.])\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n1 failed, 91 deselected in 1.48s\n", + "stderr": "" + } + }, + { + "name": "JOINT_TOTAL", + "selection": "", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 154 + ], + [ + 185 + ], + [ + 288 + ], + [ + 869 + ], + [ + 1018 + ], + [ + 1087 + ], + [ + 1110 + ], + [ + 1178, + 1179 + ], + [ + 1252 + ], + [ + 1319 + ], + [ + 1414 + ], + [ + 1559 + ], + [ + 2019 + ], + [ + 2040 + ], + [ + 2068 + ], + [ + 2278 + ], + [ + 2320 + ], + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2527, + 2528 + ], + [ + 2816 + ], + [ + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833 + ], + [ + 2834 + ], + [ + 3039 + ], + [ + 3213 + ] + ], + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, 100 * ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"{n_thresh} PCs\\n\u2192 {pca_analyzer.explained_variance_ratio[:n_thresh].sum()*100:.1f}%\",\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n@@ -285,7 +285,7 @@\n df = df.sort_values(\"loading\")\n \n # Couleur encodant le signe physique de la contribution.\n- colors = [\"#DD8452\" if v < 0 else \"#4C72B0\" for v in df[\"loading\"]]\n+ colors = [\"#CC5500\" if v < 0 else \"#0055CC\" for v in df[\"loading\"]]\n fig, ax = plt.subplots(figsize=(8, max(4, n_top * 0.35)), dpi=self.dpi)\n \n ax.barh(\n@@ -869,7 +869,7 @@\n ax.text(\n lam,\n ymax * 0.88,\n- nom,\n+ nom.replace(chr(92)*2, chr(92)),\n rotation=90,\n fontsize=6,\n color=\"crimson\",\n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ fig.canvas.print_figure(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n@@ -1084,9 +1084,7 @@\n \"Autoencodeur \u2014 Historique d'entra\u00eenement (LAMOST DR5)\", fontsize=13, y=1.02\n )\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_training_history\")\n return fig, axes\n \n def plot_ae_embedding(self, Z, meta, y, save_path=None):\n@@ -1109,6 +1107,7 @@\n \n PALETTE = {\"STAR\": \"#4C72B0\", \"GALAXY\": \"#DD8452\", \"QSO\": \"#55A868\"}\n MARKERS = {\"STAR\": \"o\", \"GALAXY\": \"s\", \"QSO\": \"^\"}\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -1176,6 +1175,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in axes[len(idx):]:\n+ unused.set_visible(False)\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n@@ -1248,9 +1249,7 @@\n ax.legend(fontsize=9)\n ax.grid(True, alpha=0.3)\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_ae_vs_pca\")\n return fig, ax\n \n def plot_latent_interpolation(\n@@ -1317,7 +1316,7 @@\n classes = np.unique(y)\n palette = [\"#4C72B0\", \"#DD8452\", \"#55A868\", \"#C44E52\"]\n fig, ax = plt.subplots(figsize=(9, 5), dpi=self.dpi)\n- for cls, color in zip(classes, palette):\n+ for cls, color in zip(classes, palette*((len(classes)+len(palette)-1)//len(palette))):\n mask = y == cls\n vals = mse_per_sample[mask]\n # Histogrammes normalis\u00e9s pour comparer les formes de distribution.\n@@ -1413,7 +1412,7 @@\n ),\n )\n sm = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n@@ -1558,7 +1557,7 @@\n )\n ax.grid(True, alpha=0.2)\n sm2 = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm2.set_array([])\n plt.colorbar(\n@@ -2017,7 +2016,7 @@\n ncols = 4\n nrows = (n_show + ncols - 1) // ncols\n fig, axes = plt.subplots(nrows, ncols, figsize=(5 * ncols, 4 * nrows), dpi=120)\n- axes_flat = axes.flatten() if n_show > 1 else [axes]\n+ axes_flat = np.asarray(axes).ravel()\n \n for ax_i, cid in zip(axes_flat, top_cids):\n profile = cluster_means.loc[cid]\n@@ -2038,7 +2037,7 @@\n ax_i.set_xlabel(\"Score moyen (\u03c3)\", fontsize=8)\n ax_i.grid(axis=\"x\", alpha=0.3)\n ax_i.set_xlim(-3, 3)\n- for ax_i in axes_flat[n_show:]:\n+ for ax_i in axes_flat[len(top_cids):]:\n ax_i.axis(\"off\")\n fig.suptitle(\n \"Top-5 features caract\u00e9ristiques par cluster HDBSCAN\\n\"\n@@ -2066,7 +2065,7 @@\n \n # V\u00e9rifie si une vraie probabilit\u00e9 est disponible.\n classes_pred = sorted(set(y_pred))\n- has_proba = confidence is not None and not np.all(confidence == 1.0)\n+ has_proba = confidence is not None\n fig, axes = plt.subplots(1, 3, figsize=(22, 8), dpi=self.dpi)\n \n ax = axes[0]\n@@ -2276,7 +2275,7 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0, 1.01)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n@@ -2318,6 +2317,7 @@\n ]\n \n fig, axes = plt.subplots(1, 1 + len(available), figsize=(22, 5), dpi=self.dpi)\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2533,6 +2524,8 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ if not (len(X) == len(X_recon) == len(spectral_types)):\n+ raise RuntimeError(\"Observation alignment: incompatible lengths\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n@@ -2821,7 +2814,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(max(vals.min(), np.finfo(float).tiny)), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n@@ -2831,12 +2824,19 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls}: excluded {missing} of {len(vals)} outside support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n+ hist_kwargs = dict(density=True)\n+ if xscale == \"linear\":\n+ hist_kwargs = dict(density=False,weights=np.full(len(vals),1/(len(vals)*np.diff(bins)[0])))\n+ ax.text(.03,.12,f\"{cls}: density normalized by total {len(vals)}, support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n alpha=0.55,\n color=color,\n- density=True,\n+ **hist_kwargs,\n label=f\"{cls} m\u00e9diane={med:.3f}\",\n )\n # Marqueur central robuste pour chaque classe.\n@@ -3054,7 +3054,7 @@\n MS_G_HOT + (MS_G_COOL - MS_G_HOT) * 0.35,\n ),\n (T_LO + (T_HI - T_LO) * 0.25, MS_G_COOL - 0.10),\n- (T_LO + T_PAD, G_HI - T_PAD * 2),\n+ (T_LO + T_PAD, G_HI - G_PAD * 2),\n (T_LO + T_PAD, G_HI - G_PAD),\n (T_LO + (T_HI - T_LO) * 0.20, MS_G_COOL + MS_W * 0.6),\n (\n@@ -3212,7 +3212,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 population fournie\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "candidate_sha256": "ee8cd6d8f1ef1c46ee4090f4f586b985e2d03225f410542ee204556856af65d4", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_disclosure_identifies_the_relevant_exclusion_bound", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_localized_numbers_and_population_suffixes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_variance_claims_use_numbers_and_component_meaning", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[vertical]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[horizontal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_denominators_and_claims_are_distinguishable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x00000279C126A880>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x00000279C08411C0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:390: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:390: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:265: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x00000279C0DC4660>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:277: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:278: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:298: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:297: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:306: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:377: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1513/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1513/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:314: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:445: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:450: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:231: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "..................................................................FFFFFF [ 78%]\nFFFFFFFFF.FFFFFFFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x00000279C126A880>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x00000279C08411C0>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:390: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:390: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:265: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x00000279C0DC4660>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:277: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:278: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:298: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:297: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:306: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:377: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1513/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1513/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:314: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:445: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:450: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:231: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n25 failed, 67 passed in 37.02s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_disclosure_identifies_the_relevant_exclusion_bound", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_localized_numbers_and_population_suffixes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_variance_claims_use_numbers_and_component_meaning", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[vertical]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[horizontal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_denominators_and_claims_are_distinguishable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1090, + 1092, + 1095, + 1096, + 1097, + 1098, + 1099, + 1102, + 1104, + 1105, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1126, + 1127, + 1128, + 1129, + 1131, + 1132, + 1133, + 1135, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1149, + 1150, + 1151, + 1153, + 1154, + 1155, + 1156, + 1158, + 1159, + 1162, + 1164, + 1165, + 1169, + 1171, + 1172, + 1173, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1195, + 1196, + 1197, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1211, + 1212, + 1215, + 1217, + 1219, + 1221, + 1222, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1232, + 1234, + 1236, + 1237, + 1239, + 1241, + 1242, + 1243, + 1244, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1252, + 1253, + 1255, + 1260, + 1261, + 1262, + 1266, + 1267, + 1268, + 1269, + 1271, + 1272, + 1274, + 1275, + 1277, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1285, + 1287, + 1288, + 1289, + 1291, + 1292, + 1293, + 1294, + 1295, + 1296, + 1298, + 1299, + 1300, + 1302, + 1303, + 1304, + 1305, + 1306, + 1308, + 1309, + 1312, + 1314, + 1316, + 1317, + 1318, + 1319, + 1320, + 1321, + 1323, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1332, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1343, + 1351, + 1356, + 1359, + 1360, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1371, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1386, + 1387, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1414, + 1415, + 1417, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1426, + 1427, + 1428, + 1429, + 1430, + 1432, + 1433, + 1434, + 1435, + 1437, + 1440, + 1441, + 1442, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1455, + 1456, + 1457, + 1458, + 1460, + 1461, + 1462, + 1463, + 1464, + 1466, + 1467, + 1468, + 1470, + 1475, + 1478, + 1481, + 1482, + 1483, + 1484, + 1485, + 1487, + 1488, + 1489, + 1490, + 1493, + 1494, + 1495, + 1498, + 1499, + 1501, + 1502, + 1504, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1516, + 1517, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1529, + 1530, + 1531, + 1532, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1558, + 1559, + 1560, + 1562, + 1563, + 1564, + 1565, + 1567, + 1568, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1582, + 1583, + 1584, + 1585, + 1587, + 1588, + 1589, + 1590, + 1592, + 1593, + 1594, + 1596, + 1599, + 1600, + 1601, + 1604, + 1605, + 1607, + 1608, + 1609, + 1612, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1620, + 1621, + 1622, + 1623, + 1624, + 1625, + 1627, + 1628, + 1629, + 1630, + 1631, + 1633, + 1634, + 1635, + 1636, + 1638, + 1643, + 1647, + 1648, + 1649, + 1650, + 1651, + 1652, + 1654, + 1655, + 1656, + 1657, + 1658, + 1660, + 1662, + 1664, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1675, + 1676, + 1678, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1690, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1703, + 1704, + 1705, + 1706, + 1707, + 1709, + 1711, + 1712, + 1714, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1724, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1736, + 1752, + 1753, + 1754, + 1755, + 1756, + 1757, + 1759, + 1761, + 1762, + 1763, + 1764, + 1765, + 1767, + 1768, + 1769, + 1771, + 1776, + 1777, + 1790, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1798, + 1799, + 1800, + 1801, + 1802, + 1803, + 1806, + 1808, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1819, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1832, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1845, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1854, + 1855, + 1856, + 1857, + 1860, + 1861, + 1862, + 1865, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1875, + 1876, + 1877, + 1879, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1890, + 1911, + 1912, + 1915, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1925, + 1927, + 1928, + 1931, + 1932, + 1933, + 1934, + 1935, + 1936, + 1938, + 1939, + 1940, + 1941, + 1942, + 1943, + 1945, + 1946, + 1947, + 1949, + 1951, + 1955, + 1956, + 1960, + 1961, + 1962, + 1963, + 1965, + 1966, + 1967, + 1969, + 1970, + 1972, + 1973, + 1974, + 1975, + 1976, + 1978, + 1979, + 1980, + 1982, + 1983, + 1984, + 1986, + 1987, + 1988, + 1989, + 1991, + 1992, + 1993, + 1995, + 1996, + 1998, + 1999, + 2000, + 2002, + 2006, + 2007, + 2011, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2021, + 2022, + 2024, + 2025, + 2026, + 2027, + 2028, + 2029, + 2031, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2045, + 2046, + 2048, + 2049, + 2050, + 2054, + 2061, + 2064, + 2067, + 2068, + 2069, + 2071, + 2072, + 2073, + 2075, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2085, + 2086, + 2087, + 2088, + 2089, + 2091, + 2092, + 2094, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2106, + 2107, + 2109, + 2112, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2121, + 2122, + 2124, + 2125, + 2127, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2136, + 2137, + 2139, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2148, + 2149, + 2150, + 2152, + 2153, + 2154, + 2155, + 2157, + 2158, + 2159, + 2161, + 2165, + 2169, + 2170, + 2171, + 2172, + 2174, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2185, + 2186, + 2188, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2198, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2206, + 2207, + 2208, + 2209, + 2213, + 2218, + 2219, + 2220, + 2223, + 2224, + 2226, + 2229, + 2230, + 2232, + 2233, + 2234, + 2235, + 2237, + 2238, + 2240, + 2241, + 2242, + 2243, + 2245, + 2246, + 2247, + 2249, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2259, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2268, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2278, + 2279, + 2280, + 2281, + 2282, + 2283, + 2287, + 2292, + 2296, + 2297, + 2298, + 2299, + 2301, + 2302, + 2303, + 2304, + 2305, + 2307, + 2308, + 2313, + 2314, + 2315, + 2316, + 2319, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2527, + 2528, + 2529, + 2543, + 2557, + 2558, + 2559, + 2560, + 2563, + 2564, + 2566, + 2567, + 2568, + 2569, + 2570, + 2571, + 2572, + 2574, + 2576, + 2577, + 2578, + 2581, + 2582, + 2591, + 2592, + 2593, + 2595, + 2596, + 2598, + 2602, + 2603, + 2604, + 2605, + 2606, + 2608, + 2611, + 2612, + 2614, + 2615, + 2616, + 2617, + 2618, + 2619, + 2620, + 2621, + 2622, + 2623, + 2624, + 2625, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2633, + 2634, + 2635, + 2637, + 2639, + 2640, + 2641, + 2642, + 2643, + 2644, + 2645, + 2646, + 2647, + 2649, + 2650, + 2651, + 2652, + 2654, + 2655, + 2657, + 2658, + 2659, + 2661, + 2662, + 2663, + 2665, + 2670, + 2671, + 2674, + 2675, + 2678, + 2679, + 2680, + 2711, + 2712, + 2715, + 2717, + 2718, + 2719, + 2720, + 2724, + 2725, + 2726, + 2727, + 2728, + 2729, + 2733, + 2734, + 2735, + 2736, + 2737, + 2738, + 2741, + 2742, + 2743, + 2744, + 2745, + 2746, + 2747, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2771, + 2772, + 2774, + 2775, + 2777, + 2778, + 2779, + 2780, + 2781, + 2782, + 2783, + 2785, + 2786, + 2787, + 2788, + 2790, + 2791, + 2792, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "........................................................................ [ 78%]\n.................... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-tgz5v2uo\\result.xml -\n92 passed in 44.30s\n", + "stderr": "" + } + } + ], + "executed_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/proofs_dimred_visualizer.py": "2ece4074314b52b26994bb1593e941e6b008e21d70dbc8de7b89d7fd6a3937fd", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "4e1ed42f2f5039a859acd5dd35802be0b67fe1389f2d5e445470d090e9a4f07a", + "tests/test_visualizer_review_contracts.py": "ef4205ff44a5e3a80faa19fab29acbacc895a7712b9a14559eab7fd6ff285ea2" + }, + "protected_unchanged": true +} diff --git a/audit/m28_r3_validation_results.json b/audit/m28_r3_validation_results.json new file mode 100644 index 0000000..78a263c --- /dev/null +++ b/audit/m28_r3_validation_results.json @@ -0,0 +1,151 @@ +{ + "active_head": "e924f36f24412a435f5ca54a95cdfad914835ff2", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "executable": "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "versions": { + "numpy": "2.4.6", + "pandas": "3.1.1", + "scipy": "1.17.1", + "scikit-learn": "1.9.1", + "matplotlib": "3.11.2", + "pytest": "8.4.2", + "black": "24.4.2", + "ruff": "0.5.0", + "pillow": "13.0.0" + }, + "effective_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/visualizer_review_contracts.py": "4e1ed42f2f5039a859acd5dd35802be0b67fe1389f2d5e445470d090e9a4f07a", + "tests/test_visualizer_review_contracts.py": "ef4205ff44a5e3a80faa19fab29acbacc895a7712b9a14559eab7fd6ff285ea2", + "audit/check_m28_evidence.py": "bac3e5210eb94a2642c3dbb6e79824899cb66920d1c11233f900de38a61d1485", + "audit/check_m28_boundaries.py": "72f0c956c8719acafe0d9c07fa05e93c3f4d69ce297a8befeccef73bad4cdfb0", + "audit/check_m28_validation.py": "fda730977f875e9b951171a89e5e14d44ca0fa7524e2c7651e45d743bc581e1b", + "audit/check_m28_review.py": "aff0521e27ee6136da0b8851f904cc3eb5a8953fb0b67968858bee9590ace436" + }, + "commands": [ + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-W", + "error", + "--junitxml=test-results/m28-targeted-validation.xml" + ], + "exit_code": 0, + "stdout": ".................................................................. [100%]\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-targeted-validation.xml -\n66 passed in 7.70s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "--junitxml=test-results/m28-complete-validation.xml" + ], + "exit_code": 0, + "stdout": "........................................................................ [ 10%]\n........................................................................ [ 20%]\n........................................................................ [ 30%]\n........................................................................ [ 41%]\n........................................................................ [ 51%]\n........................................................................ [ 61%]\n........................................................................ [ 72%]\n........................................................................ [ 82%]\n........................................................................ [ 92%]\n.................................................. [100%]\n============================== warnings summary ===============================\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_partial_esa_supplement_merges_without_losing_xmatch_rows\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_bulk_without_matches_stops_auto_fallback\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_cone_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_retry_limit_raises_or_falls_back_by_mode\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_transient_failure_retries_then_succeeds\n C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\tools\\gaia_crossmatcher.py:1210: Pandas4Warning: The inplace keyword in DataFrame.drop is deprecated and will be removed in a future version (PDEP-8).\n See https://pandas.pydata.org/docs/dev/whatsnew/v3.1.0.html#deprecation-inplace for more details.\n df_merged.drop(columns=[\"objid\"], inplace=True, errors=\"ignore\")\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-complete-validation.xml -\n698 passed, 62 deselected, 7 warnings in 25.20s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "--import-mode=importlib", + "--junitxml=test-results/m28-importlib-validation.xml" + ], + "exit_code": 0, + "stdout": "........................................................................ [ 10%]\n........................................................................ [ 20%]\n........................................................................ [ 30%]\n........................................................................ [ 41%]\n........................................................................ [ 51%]\n........................................................................ [ 61%]\n........................................................................ [ 72%]\n........................................................................ [ 82%]\n........................................................................ [ 92%]\n.................................................. [100%]\n============================== warnings summary ===============================\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_partial_esa_supplement_merges_without_losing_xmatch_rows\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_bulk_without_matches_stops_auto_fallback\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_cone_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_retry_limit_raises_or_falls_back_by_mode\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_transient_failure_retries_then_succeeds\n C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\tools\\gaia_crossmatcher.py:1210: Pandas4Warning: The inplace keyword in DataFrame.drop is deprecated and will be removed in a future version (PDEP-8).\n See https://pandas.pydata.org/docs/dev/whatsnew/v3.1.0.html#deprecation-inplace for more details.\n df_merged.drop(columns=[\"objid\"], inplace=True, errors=\"ignore\")\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-importlib-validation.xml -\n698 passed, 62 deselected, 7 warnings in 22.46s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "black", + "--check", + "src", + "tests", + "scripts", + "app.py", + "audit/check_m28_evidence.py", + "audit/check_m28_boundaries.py", + "audit/check_m28_validation.py", + "audit/check_m28_review.py" + ], + "exit_code": 0, + "stdout": "", + "stderr": "All done! \u2728 \ud83c\udf70 \u2728\n48 files would be left unchanged.\n" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "ruff", + "check", + "src", + "tests", + "scripts", + "app.py", + "audit/check_m28_evidence.py", + "audit/check_m28_boundaries.py", + "audit/check_m28_validation.py", + "audit/check_m28_review.py" + ], + "exit_code": 0, + "stdout": "All checks passed!\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pip", + "check" + ], + "exit_code": 0, + "stdout": "No broken requirements found.\n", + "stderr": "" + }, + { + "command": [ + "git", + "diff", + "--check" + ], + "exit_code": 0, + "stdout": "", + "stderr": "" + }, + { + "command": [ + "git", + "diff", + "--exit-code", + "39dad874610745ccd456d26972e90f6fb3a11405", + "--", + "src", + "notebooks", + "data", + "models", + "requirements", + "pyproject.toml", + ".github", + "app.py", + "AGENTS.md" + ], + "exit_code": 0, + "stdout": "", + "stderr": "" + } + ], + "all_commands_passed": true +} diff --git a/tests/proofs_dimred_visualizer.py b/tests/proofs_dimred_visualizer.py new file mode 100644 index 0000000..e582e6d --- /dev/null +++ b/tests/proofs_dimred_visualizer.py @@ -0,0 +1,472 @@ +"""Explicit M2.8 counterexamples; archived and removed from the green head. + +No xfail and no production edits. Refusal, masking and unavailable outputs are +alternatives on invalid data; valid positive cases are in the green suite. +""" + +import re +from types import SimpleNamespace + +import numpy as np +from numpy.testing import assert_allclose, assert_array_equal +import pandas as pd +import pytest + + +def call_or_domain_refusal(call, domain): + """Permit relevant explicit refusal, never accept incidental backend errors.""" + try: + return call() + except (ValueError, RuntimeError) as exc: + message = str(exc).lower() + assert any(word in message for word in domain), message + assert not any( + word in message + for word in [ + "concatenate", + "percentile", + "0 columns", + "singular data covariance", + ] + ), message + return None + except Exception as exc: + pytest.fail( + f"Incidental {type(exc).__name__} instead of explicit domain handling: {exc}" + ) + + +def gaussian_population(n=250): + rng = np.random.default_rng(1729) + Z = rng.normal(size=(n, 2)) * [2.0, 3.0] + meta = pd.DataFrame({"teff_gspphot": np.arange(n, dtype=float) + 3500}) + return Z, np.array(["STAR"] * n), meta + + +@pytest.mark.parametrize( + "case", ["gaussian", "analytic_normal", "mixture31", "mixture7", "mixture83"] +) +def test_kde_labeled_regions_enclose_probability_mass( + visualizer_case, visualizer_contracts, monkeypatch, case +): + """Each displayed label belongs to an actual STAR iso-density geometry. + + Mass means fitted-estimator probability, not empirical fraction of stars. + The broad 0.05-grid mixture quadrature captures >.9999 total mass; .006 + allows cell-boundary discretization, independently checked by C13/K4/K5. + Geometry rtol=.05 covers interpolation on the production 200x200 grid. + """ + import scipy.stats + from matplotlib.axes import Axes + from matplotlib.path import Path + + c = visualizer_case + if case.startswith("mixture"): + rng = np.random.default_rng(int(case.removeprefix("mixture"))) + a = rng.normal(size=(210, 2)) * [1.0, 2.0] + b = rng.normal(size=(90, 2)) * [1.4, 0.7] + [6.0, 3.0] + nonstar = rng.normal(size=(40, 2)) * 0.3 + [6.0, -4.0] + Z = np.vstack([a, b, nonstar]) + y = np.array(["STAR"] * 300 + ["QSO"] * 40) + meta = pd.DataFrame({"teff_gspphot": np.linspace(3500, 9000, len(Z))}) + gx, gy = np.meshgrid(np.linspace(-12, 18, 601), np.linspace(-14, 14, 561)) + else: + Z, y, meta = gaussian_population() + g = np.linspace(-8, 8, 401) + gx, gy = np.meshgrid(2 * g, 3 * g) + stars = {tuple(row) for row in Z[y == "STAR"]} + fitted, labelled = [], [] + real = scipy.stats.gaussian_kde + original_clabel = Axes.clabel + + def fit(data, **kwargs): + estimator = ( + visualizer_contracts.AnalyticGaussian(data, **kwargs) + if case == "analytic_normal" + else real(data, **kwargs) + ) + fitted.append(estimator) + return estimator + + def clabel(ax, cs, *args, **kwargs): + geometry = [[segment.copy() for segment in level] for level in cs.allsegs] + labelled.append( + (ax, cs, kwargs.get("fmt", args[0] if args else None), geometry) + ) + return original_clabel(ax, cs, *args, **kwargs) + + monkeypatch.setattr(scipy.stats, "gaussian_kde", fit) + monkeypatch.setattr(Axes, "clabel", clabel) + fig, axes = c.viz.plot_latent_kde(Z, y, meta) + assert ( + fitted and labelled and fig is not None + ), "Valid KDE needs estimator and informative labelled contours" + estimator = fitted[0] + assert estimator.dataset.shape[1] >= 3 + assert all( + tuple(point) in stars for point in estimator.dataset.T + ), "KDE fitted on non-STAR observations" + if case.startswith("mixture"): + # n=150 random sampling: hypergeometric SE about .027 (p=.3,N=300). + # The .10 absolute envelope is conservative for this fixture; it is + # not a universal guarantee nor a mandatory sample-size rule. + assert_allclose( + np.mean(estimator.dataset[0] > 3), + 90 / 300, + atol=0.10, + rtol=0, + err_msg="Fitted STAR sample excludes or overrepresents a stellar mode", + ) + broad = estimator(np.vstack([gx.ravel(), gy.ravel()])) + cell = (gx[0, 1] - gx[0, 0]) * (gy[1, 0] - gy[0, 0]) + assert_allclose(broad.sum() * cell, 1, atol=1e-4) + points = np.column_stack([gx.ravel(), gy.ravel()]) + for ax, cs, fmt, geometry in labelled: + assert cs in ax.collections, "Must test the actual plotted contour artist" + claims = [] + for level, segments in zip(cs.levels, geometry): + label = fmt[level] if isinstance(fmt, dict) else fmt(level) + match = re.fullmatch(r"\s*(\d+(?:\.\d+)?)\s*%\s*", label) + assert match, f"Uninterpretable contour probability label: {label}" + claimed = float(match.group(1)) / 100 + claims.append(claimed) + mass = float(broad[broad >= level].sum() * cell) + if case == "analytic_normal": + assert_allclose(mass, max(0.0, 1 - 12 * np.pi * level), atol=0.006) + assert_allclose( + mass, + claimed, + atol=0.006, + rtol=0, + err_msg=f"Actual label {label} disagrees with enclosed KDE mass", + ) + nonempty = [segment for segment in segments if len(segment)] + assert nonempty, f"No contour geometry for label {label}" + enclosed = np.zeros(len(points), dtype=bool) + for segment in nonempty: + # Even/odd containment retains disjoint modes and excludes holes. + enclosed ^= Path(segment).contains_points(points) + polygon_mass = float(broad[enclosed].sum() * cell) + assert_allclose( + polygon_mass, + claimed, + atol=0.006, + rtol=0, + err_msg="Actual contour polygons do not enclose their labelled mass", + ) + vertices = np.vstack(nonempty) + for segment in nonempty: + assert_allclose( + segment[0], + segment[-1], + atol=1e-10, + rtol=0, + err_msg="A complete probability contour must be closed", + ) + xlim, ylim = sorted(ax.get_xlim()), sorted(ax.get_ylim()) + assert np.all( + (vertices[:, 0] >= xlim[0]) + & (vertices[:, 0] <= xlim[1]) + & (vertices[:, 1] >= ylim[0]) + & (vertices[:, 1] <= ylim[1]) + ), "Complete probability contours must be inside the displayed domain" + assert_allclose( + estimator(vertices.T), + level, + rtol=0.05, + atol=1e-10, + err_msg="Contour vertices are not on the fitted STAR iso-density", + ) + assert sorted(claims) == [0.68, 0.95, 0.99] + + +def test_hr_region_vertices_have_gravity_units_and_stay_in_domain(visualizer_case): + c = visualizer_case + _, ax = c.viz.plot_hr_teff_regions(c.meta) + # Independent input-domain envelope: never take admissible gravity units + # from limits chosen by the implementation under test. + gravity = c.meta.logg_gspphot.to_numpy() + temperature = c.meta.teff_gspphot.to_numpy() + low, high = gravity.min() - 0.1 * np.ptp(gravity), gravity.max() + 0.1 * np.ptp( + gravity + ) + assert ax.patches, "Valid HR regional figure must contain informative regions" + vertices = np.vstack([p.get_xy() for p in ax.patches]) + assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices + tlo, thi = temperature.min() - 0.1 * np.ptp( + temperature + ), temperature.max() + 0.1 * np.ptp(temperature) + assert np.all((vertices[:, 0] >= tlo) & (vertices[:, 0] <= thi)) + + +@pytest.mark.parametrize("n", [6, 9]) +def test_hr_population_title_is_counted_or_omitted( + visualizer_case, visualizer_contracts, n +): + c = visualizer_case + meta = pd.concat([c.meta, c.meta.iloc[:3]], ignore_index=True).iloc[:n] + _, ax = c.viz.plot_hr_teff_regions(meta) + title = re.sub(r"(?:LAMOST|Gaia)\s*DR\s*\d+", "", ax.get_title(), flags=re.I) + counts = visualizer_contracts.numbers(title) + assert not counts or all(v == n for v in counts), title + + +def test_reconstruction_cardinality_cannot_reassign_spectral_classes(visualizer_case): + c = visualizer_case + # Original G row 4 was removed upstream; truncating assigns original F row 8 + # to G. Twelve retained F rows satisfy the >=10 + # display policy. Missing IDs cannot be reconstructed by this API. + types = np.array(["F"] * 4 + ["G"] * 4 + ["F"] * 9) + X = np.arange(17.0)[:, None] * 10 + keep = np.delete(np.arange(17), 4) + expected_F = X[keep][types[keep] == "F"].mean() + result = call_or_domain_refusal( + lambda: c.viz.plot_ae_recon_by_spectral_type( + X[keep], X[keep] + 2, types, ["feature_Hα_eq_width"] + ), + ["align", "length", "taille", "cardinal", "observ", "row"], + ) + if result is not None and result[0] is not None: + _, axes = result + assert_allclose( + axes[0].patches[0].get_height(), + expected_F, + err_msg="Truncation is not observation identity", + ) + + +@pytest.mark.parametrize("name", ["plot_hdbscan_clusters", "plot_hdbscan_hr"]) +def test_cluster_colorbar_matches_actual_cluster_rgb( + visualizer_case, hdbscan_module, name, visualizer_contracts +): + c = visualizer_case + hdb = hdbscan_module.HDBSCANAnalyzer() + hdb.labels_ = np.array([2, -1, 7, 2, 7, 2]) + hdb._compute_stats() + hdb._build_palette() + fig, axes = getattr(c.viz, name)( + c.Z, hdb, c.y if name.endswith("clusters") else c.meta + ) + coordinates = ( + c.Z + if name.endswith("clusters") + else c.meta[["teff_gspphot", "logg_gspphot"]].to_numpy() + ) + visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates) + + +def test_actual_unit_confidence_is_not_claimed_unavailable(visualizer_case): + c = visualizer_case + _, axes = c.viz.plot_xgboost_umap( + c.Z, np.array(["F"] * 6), np.ones(6), np.array([0] * 6), {0: "blue"} + ) + # Supplied ones are compatible with genuine probability=1; no availability + # flag enters this API. Numeric values alone cannot establish absence. + assert not any("non disponible" in t.get_text() for t in axes[1].texts) + + +@pytest.mark.parametrize("name", ["plot_ae_embedding", "plot_latent_zoomed"]) +def test_no_physical_columns_still_supports_classes_or_explicit_refusal( + visualizer_case, name +): + c = visualizer_case + meta = c.meta[["obsid"]] + + def call(): + if name == "plot_ae_embedding": + return c.viz.plot_ae_embedding(c.Z, meta, c.y) + return c.viz.plot_latent_zoomed(c.Z, c.y, meta) + + result = call_or_domain_refusal( + call, ["physical", "param", "gaia", "column", "colonn"] + ) + if result is not None and result[0] is not None: + _, axes = result + ax = np.atleast_1d(axes)[0] + assert sum(len(sc.get_offsets()) for sc in ax.collections) == 6 + + +@pytest.mark.parametrize("n_show", [1, 0, 4]) +def test_cluster_profiles_unavailable_slots_not_presented_as_data( + visualizer_case, n_show +): + c = visualizer_case + means = pd.DataFrame( + [[1.0, 2, 3, 4, 5], [-1, -2, -3, -4, -5]], index=[2, 7], columns=list("abcde") + ) + result = call_or_domain_refusal( + lambda: c.viz.plot_hdbscan_feature_profiles( + means, np.array([2, 7, 7]), n_show=n_show + ), + ["cluster", "n_show", "positive", "count", "nombre"], + ) + if result is not None and result[0] is not None: + _, axes = result + for ax in np.asarray(axes).ravel(): + assert ( + ax.patches or not ax.axison or not ax.get_visible() + ), "Empty slot looks like a measurement panel" + + +def test_more_reconstructions_than_rows_has_no_empty_measurement_axes(visualizer_case): + c = visualizer_case + _, axes = c.viz.plot_ae_reconstruction( + c.Z[:2], c.Z[:2] + 1, ["a", "b"], n_samples=4 + ) + for ax in axes: + if not ax.axison or not ax.get_visible(): + continue + assert ( + len(ax.lines) >= 2 + ), "Visible panel needs original and reconstructed observations" + pair = [np.asarray(line.get_ydata()) for line in ax.lines[:2]] + assert all( + len(values) == 2 for values in pair + ), "Empty or incomplete reconstruction lines" + row = next((i for i in range(2) if np.array_equal(pair[0], c.Z[i])), None) + assert row is not None, "Panel is not an actual input observation" + assert_array_equal(pair[1], c.Z[row] + 1) + populated = [ax for ax in axes if ax.axison and ax.get_visible()] + assert len(populated) == 2 + + +def test_truncated_variance_annotation_does_not_attribute_wrong_mass( + visualizer_case, visualizer_contracts +): + c = visualizer_case + pca = SimpleNamespace( + explained_variance_ratio=np.array([0.6, 0.25, 0.15]), + n_components_for_variance=lambda threshold: 3, + ) + _, axes = c.viz.plot_variance_explained(pca, threshold=0.95, max_pcs=2) + visualizer_contracts.assert_variance_annotations( + axes[1], pca.explained_variance_ratio + ) + + +def test_log_histogram_keeps_small_positive_errors( + visualizer_case, visualizer_contracts, monkeypatch +): + c = visualizer_case + errors = np.array([1e-8, 1e-7, 1e-6, 0.01, 0.1, 1.0]) + calls = visualizer_contracts.capture_histograms(monkeypatch) + _, axes = c.viz.plot_ae_error_distribution_logscale(errors, np.array(["STAR"] * 6)) + call = next(call for call in calls if call["ax"] is axes[1]) + missing, edges = visualizer_contracts.assert_histogram_population(call, errors) + assert missing == 0 or visualizer_contracts.exclusion_report( + axes[1], "STAR", missing, 6, edges, errors + ), "Positive MSE population silently truncated" + + +def test_histogram_does_not_silently_omit_fifth_class( + visualizer_case, visualizer_contracts, monkeypatch +): + c = visualizer_case + labels = np.array(["A", "B", "C", "D", "E", "E"]) + calls = visualizer_contracts.capture_histograms(monkeypatch) + result = call_or_domain_refusal( + lambda: c.viz.plot_ae_error_distribution( + np.array([1.0, 2, 3, 4, 5, 9]), labels + ), + ["class", "palette", "population"], + ) + if result is None: + return + _, ax = result + represented = {label.split(" ")[0] for label in ax.get_legend_handles_labels()[1]} + assert represented == set(labels), "Palette length silently drops classes" + values = np.array([1.0, 2, 3, 4, 5, 9]) + assert len(calls) == 5, "Legend-only classes are not histogram populations" + for cls in set(labels): + call = next( + ( + call + for call in calls + if cls + in visualizer_contracts.tokens(call["label"]).union( + {s.upper() for s in visualizer_contracts.tokens(call["label"])} + ) + ), + None, + ) + assert call is not None, f"Missing actual histogram for class {cls}" + missing, _ = visualizer_contracts.assert_histogram_population( + call, values[labels == cls] + ) + assert missing == 0 + + +@pytest.mark.parametrize("name", ["plot_training_history", "plot_ae_vs_pca"]) +def test_default_output_directory_applies_to_direct_exports( + visualizer_case, tmp_path, name, visualizer_contracts +): + c = visualizer_case + viz = c.module.DimRedVisualizer(output_dir=tmp_path, dpi=30) + if name == "plot_training_history": + result = viz.plot_training_history( + {"train_loss": [2.0, 1], "val_loss": [3.0, 2]} + ) + else: + result = viz.plot_ae_vs_pca( + pd.DataFrame( + { + "method": ["PCA", "AE"], + "n_components": [1, 2], + "mse_mean": [0.5, 0.3], + } + ) + ) + assert result[0] is not None + assert list(tmp_path.glob("*.png")), "Configured output_dir ignored" + for path in tmp_path.glob("*.png"): + visualizer_contracts.assert_png_matches_figure(path, result[0], viz.dpi) + + +def test_trustworthiness_axis_contains_computed_values( + visualizer_case, visualizer_contracts +): + c = visualizer_case + rng = np.random.default_rng(1729) + X = rng.normal(size=(12, 2)) + bad = X[[7, 0, 9, 4, 1, 10, 2, 11, 3, 6, 5, 8]] + _, ax = c.viz.plot_trustworthiness(X, X, bad, k_values=[1, 2, 3]) + visualizer_contracts.assert_visible_or_disclosed( + ax, {"UMAP": ax.lines[0].get_ydata(), "t-SNE": ax.lines[1].get_ydata()} + ) + + +def test_default_eigenspectrum_line_labels_are_renderable(visualizer_case): + c = visualizer_case + pca = SimpleNamespace( + loadings=np.array([[0.1, -0.4, 0.9, -0.2]]), + explained_variance_ratio=np.array([1.0]), + ) + try: + fig, axes = c.viz.plot_eigenspectra( + pca, np.array([3800.0, 4400.0, 5500.0, 6800.0]), n_components=1 + ) + fig.canvas.draw() + except Exception as exc: + assert False, f"Valid default eigen-spectrum labels must render: {exc}" + assert_array_equal(axes[0].lines[0].get_ydata(), pca.loadings[0]) + + +def test_linear_histogram_truncation_discloses_population( + visualizer_case, visualizer_contracts, monkeypatch +): + """R10 candidate: conditional renormalization is not full-class coverage.""" + c = visualizer_case + stars = np.linspace(0.01, 0.1, 40) + qso = np.r_[[0.04, 0.09, 0.1], np.linspace(4, 7, 47)] + values = np.r_[stars, qso] + labels = np.array(["STAR"] * 40 + ["QSO"] * 50) + calls = visualizer_contracts.capture_histograms(monkeypatch) + _, axes = c.viz.plot_ae_error_distribution_logscale(values, labels) + call = next( + call for call in calls if call["ax"] is axes[0] and "QSO" in call["label"] + ) + convention, missing, edges = visualizer_contracts.assert_histogram_representation( + call, qso, "QSO" + ) + area = sum(p.get_width() * p.get_height() for p in call["result"][2]) + assert_allclose(area, (50 - missing) / 50 if convention == "total" else 1) diff --git a/tests/test_dimred_visualizer.py b/tests/test_dimred_visualizer.py index 1de00d1..9752126 100644 --- a/tests/test_dimred_visualizer.py +++ b/tests/test_dimred_visualizer.py @@ -107,7 +107,9 @@ def test_hr_missing_columns_refused(visualizer_case): assert c.viz.plot_hr_teff_regions(pd.DataFrame()) == (None, None) -def test_real_pca_variance_and_reconstruction_energy(visualizer_case, dimred_pca_class): +def test_real_pca_variance_and_reconstruction_energy( + visualizer_case, dimred_pca_class, visualizer_contracts +): c = visualizer_case X = np.array( [[3.0, 0, 0], [-3, 0, 0], [0, 2, 0], [0, -2, 0], [0, 0, 1], [0, 0, -1]] @@ -118,7 +120,9 @@ def test_real_pca_variance_and_reconstruction_energy(visualizer_case, dimred_pca assert_allclose(axes[1].lines[0].get_ydata(), np.array([9, 13, 14]) / 14 * 100) assert_allclose(axes[1].lines[1].get_ydata(), [90, 90]) assert_allclose(axes[1].lines[2].get_xdata(), [2, 2]) - assert "2 PCs" in text(axes[1]) and "92.9%" in text(axes[1]) + visualizer_contracts.assert_variance_annotations( + axes[1], pca.explained_variance_ratio, expected_count=2 + ) df = pca.reconstruction_error_vs_n(X, [1, 2, 3]) _, ax = c.viz.plot_reconstruction_error(df) assert_allclose(ax.lines[0].get_xdata(), [1, 2, 3]) diff --git a/tests/test_visualizer_review_contracts.py b/tests/test_visualizer_review_contracts.py index 4418a48..34a95fe 100644 --- a/tests/test_visualizer_review_contracts.py +++ b/tests/test_visualizer_review_contracts.py @@ -89,3 +89,151 @@ def test_histogram_disclosure_identifies_the_relevant_exclusion_bound( visualizer_contracts.exclusion_report(ax, "QSO", 2, 5, [0.0, 0.15], values) == admitted ), message + + +def test_localized_numbers_and_population_suffixes(visualizer_contracts): + for text, expected in [ + ("0,000100", [0.0001]), + ("43k étoiles", [43000]), + ("≈ 1,5M objets", [1500000]), + ("43 019", [43019]), + ("1\u202f234\u202f567,25", [1234567.25]), + ("1,234,567", [1234567]), + ("1,5e-3", [0.0015]), + ]: + assert_allclose(visualizer_contracts.numbers(text), expected, err_msg=text) + + +def test_variance_claims_use_numbers_and_component_meaning( + visualizer_case, visualizer_contracts +): + _, ax = visualizer_case.plt.subplots() + ratios = np.array([9.0, 4.0, 1.0]) / 14 + for name in ["PC", "PCs", "CP", "composantes"]: + for count, percentage, admitted in [(2, "92,9", True), (3, "85", False)]: + for t in list(ax.texts): + t.remove() + ax.text(0.1, 0.1, f"{count} {name} → {percentage} %") + if admitted: + visualizer_contracts.assert_variance_annotations( + ax, ratios, expected_count=2 + ) + else: + with pytest.raises(AssertionError, match="variance disagree"): + visualizer_contracts.assert_variance_annotations(ax, ratios) + + +@pytest.mark.parametrize("orientation", ["vertical", "horizontal"]) +def test_all_categorical_representations_must_agree( + visualizer_case, visualizer_contracts, orientation +): + from matplotlib.colors import BoundaryNorm, ListedColormap + from matplotlib.cm import ScalarMappable + from matplotlib.patches import Patch + + c = visualizer_case + fig, ax = c.plt.subplots() + labels = np.array([2, 7, 2, 7, 2, 7]) + for cid, color in [(2, "red"), (7, "blue")]: + ax.scatter(*c.Z[labels == cid].T, c=color) + ax.text(cid, 0, f"C{cid}", bbox=dict(fc=color)) + ax.legend(handles=[Patch(color="red", label="C2"), Patch(color="blue", label="C7")]) + visualizer_contracts.assert_cluster_encoding(fig, ax, labels, c.Z) + sm = ScalarMappable( + norm=BoundaryNorm([1.5, 4.5, 7.5], 2), cmap=ListedColormap(["red", "blue"]) + ) + cb = fig.colorbar(sm, ax=ax, orientation=orientation, label="Groupe HDBSCAN") + visualizer_contracts.assert_cluster_encoding(fig, ax, labels, c.Z) + sm.set_cmap(ListedColormap(["blue", "red"])) + with pytest.raises(AssertionError, match="Misleading colorbar"): + visualizer_contracts.assert_cluster_encoding(fig, ax, labels, c.Z) + sm.set_cmap(ListedColormap(["red", "blue"])) + ax.legend(handles=[Patch(color="blue", label="C2"), Patch(color="red", label="C7")]) + with pytest.raises(AssertionError, match="Misleading categorical legend"): + visualizer_contracts.assert_cluster_encoding(fig, ax, labels, c.Z) + ax.legend(handles=[Patch(color="red", label="2"), Patch(color="blue", label="7")]) + global_legend = fig.legend( + handles=[Patch(color="blue", label="C2"), Patch(color="red", label="C7")] + ) + with pytest.raises(AssertionError, match="Misleading categorical legend"): + visualizer_contracts.assert_cluster_encoding(fig, ax, labels, c.Z) + global_legend.remove() + cb.remove() + + +def test_histogram_denominators_and_claims_are_distinguishable( + visualizer_case, visualizer_contracts, monkeypatch +): + from matplotlib.patches import Patch + + c = visualizer_case + qso = np.r_[[0.04, 0.09, 0.1], np.linspace(4, 7, 47)] + edges = np.linspace(0, 0.15, 60) + calls = visualizer_contracts.capture_histograms(monkeypatch) + for mode, claim, admitted in [ + ( + "conditional", + "QSO : 47 exclues sur 50, observations tronquées hors support 0,000000 à 0,150000", + True, + ), + ( + "total", + "QSO : densité normalisée par effectif total 50, support 0,000000 à 0,150000", + True, + ), + ( + "conditional", + "QSO : density normalized by total 50, support 0 to 0.15", + False, + ), + ("total", "QSO : conditional density", False), + ("conditional", "QSO : excluded 50 of 47 outside support 0 to 0.15", False), + ( + "total", + "QSO : density normalized by total 500, visible 50, support 0 to 0.15", + False, + ), + ]: + _, ax = c.plt.subplots() + if mode == "total": + ax.hist( + qso, + bins=edges, + weights=np.full(50, 1 / (50 * np.diff(edges)[0])), + label="QSO", + ) + else: + ax.hist(qso, bins=edges, density=True, label="QSO") + ax.text(0.1, 0.1, claim) + if admitted: + convention, missing, _ = ( + visualizer_contracts.assert_histogram_representation( + calls[-1], qso, "QSO" + ) + ) + assert convention == mode and missing == 47 + assert_allclose( + sum(p.get_width() * p.get_height() for p in calls[-1]["result"][2]), + 3 / 50 if mode == "total" else 1, + ) + else: + with pytest.raises(AssertionError): + visualizer_contracts.assert_histogram_representation( + calls[-1], qso, "QSO" + ) + fig, ax = c.plt.subplots() + ax.hist( + qso, + bins=edges, + weights=np.full(50, 1 / (50 * np.diff(edges)[0])), + label="QSO data", + ) + correct = "QSO: density normalized by total 50, support 0 to 0.15" + ax.legend(handles=[Patch(label=correct)]) + assert ( + visualizer_contracts.assert_histogram_representation(calls[-1], qso, "QSO")[0] + == "total" + ) + fig.legend(handles=[Patch(label="QSO: conditional density")]) + with pytest.raises(AssertionError, match="Contradictory histogram"): + visualizer_contracts.assert_histogram_representation(calls[-1], qso, "QSO") diff --git a/tests/visualizer_review_contracts.py b/tests/visualizer_review_contracts.py index 99f1a07..cad42c5 100644 --- a/tests/visualizer_review_contracts.py +++ b/tests/visualizer_review_contracts.py @@ -2,23 +2,75 @@ from io import BytesIO import re +import unicodedata import numpy as np from numpy.testing import assert_allclose, assert_array_equal def tokens(label): - return set(re.findall(r"[\w]+", label.casefold())) + folded = "".join( + c + for c in unicodedata.normalize("NFKD", label.casefold()) + if not unicodedata.combining(c) + ) + return set(re.findall(r"[\w]+", folded)) def numbers(label): + """Read decimal dot/comma, spaced thousands, scientific notation and k/M. + + A single comma is decimal (French convention); unambiguous repeated comma + thousands are supported. A lone ``1,234`` is inherently locale ambiguous. + """ + label = re.sub(r"\b\d{1,3}(?:,\d{3}){2,}\b", lambda m: m[0].replace(",", ""), label) normalized = re.sub(r"(?<=\d)[ \u202f\u00a0](?=\d{3}(?:\D|$))", "", label) return [ - float(n) - for n in re.findall(r"[-+]?\d+(?:[.,]\d+)?(?:e[-+]?\d+)?", normalized, re.I) + float(n.replace(",", ".")) * ({"k": 1e3, "K": 1e3, "M": 1e6}.get(suffix, 1)) + for n, suffix in re.findall( + r"([-+]?\d+(?:[.,]\d+)?(?:[eE][-+]?\d+)?)\s*([kKM]?)(?!\w)", normalized + ) ] +def assert_variance_annotations(ax, ratios, expected_count=None): + """Link every variance claim to its component count, independent of prose.""" + seen = [] + component = r"(?:PCs?|CPs?|composantes?|components?)" + for annotation in ax.texts: + label = annotation.get_text() + percentages = re.findall(r"(\d+(?:[.,]\d+)?)\s*%", label) + counts = re.findall( + rf"(\d+)\s*{component}\b|\b{component}\s*[:=]?\s*(\d+)", label, re.I + ) + counts = [int(a or b) for a, b in counts] + if percentages and not counts: + assert hasattr( + annotation, "xy" + ), "Variance claim needs a count or annotated coordinate" + counts = [int(annotation.xy[0])] + for count in counts: + assert 1 <= count <= len(ratios), "Invalid component count" + for percentage in percentages: + assert_allclose( + numbers(percentage)[0], + sum(ratios[:count]) * 100, + atol=0.05, + rtol=0, + err_msg="Annotated component count and variance disagree", + ) + seen.append(count) + if expected_count is not None: + assert expected_count in seen, "Expected variance/component relation is missing" + + +def visible_legends(fig): + """Read displayed Legend artists, including figure and additional legends.""" + from matplotlib.legend import Legend + + return [legend for legend in fig.findobj(match=Legend) if legend.get_visible()] + + def assert_class_label(label, cls, count): assert cls.casefold() in tokens(label), (label, cls) assert float(count) in numbers(label), (label, count) @@ -111,7 +163,7 @@ def hist(ax, values, *args, **kwargs): return calls -def assert_histogram_population(call, expected): +def assert_histogram_population(call, expected, normalization="conditional"): """Count samples independently, including the closed final bin endpoint.""" expected = np.asarray(expected) _, edges, patches = call["result"] @@ -135,13 +187,71 @@ def assert_histogram_population(call, expected): assert sum(wanted) > 0, "A nominal distribution must contain observations" plotted = np.array([p.get_height() for p in patches]) reference = np.array(wanted, dtype=float) - if call["density"]: + if normalization == "total": + reference /= len(expected) * np.diff(edges) + elif call["density"]: reference /= sum(wanted) * np.diff(edges) assert_allclose(plotted, reference, atol=1e-10, rtol=1e-10) missing = len(expected) - sum(wanted) return missing, edges +def assert_histogram_representation(call, expected, cls): + """Admit conditional density with disclosure or identified total density. + + Proposed R10 test policy, subject to scientific review. Heights come from + independently counted observations; text cannot change the denominator. + """ + ax = call["ax"] + texts = [t.get_text() for t in [*ax.texts, *ax.figure.texts] if t.get_visible()] + texts += [ + t.get_text() + for legend in visible_legends(ax.figure) + for t in legend.texts + if t.get_visible() + ] + relevant = [s for s in texts if cls.casefold() in tokens(s)] + norm_words = { + "normalized", + "normalised", + "normalisee", + "normalise", + "normalisation", + "normalization", + } + total_claims = [ + s + for s in relevant + if tokens(s).intersection(norm_words) and "total" in tokens(s) + ] + convention = "total" if total_claims else "conditional" + missing, edges = assert_histogram_population(call, expected, convention) + if convention == "total": + for label in total_claims: + ns = numbers(label) + declared = re.search( + r"\btotal\b\D*?(\d+(?:[.,]\d+)?\s*[kKM]?)", label, re.I + ) + assert declared and numbers(declared[1]) == [ + len(expected) + ], "Wrong total-normalization reference population" + assert tokens(label + " " + ax.get_ylabel()).intersection( + {"density", "densite"} + ), "Density scale must be identified" + assert all( + any(abs(v - b) <= max(5e-7, abs(b) * 0.005) for v in ns) + for b in [edges[0], edges[-1]] + ), "Total density needs its actual support" + assert not any( + tokens(s).intersection({"conditional", "conditionnelle"}) for s in relevant + ), "Contradictory histogram normalization claims" + else: + assert missing == 0 or exclusion_report( + ax, cls, missing, len(expected), edges, expected + ), "Undisclosed conditional-density exclusion" + return convention, missing, edges + + def exclusion_report(ax, cls, missing, total, edges, values=None): """Require population/count and the bound actually crossed by excluded data.""" bounds = [edges[0], edges[-1]] @@ -153,11 +263,31 @@ def exclusion_report(ax, cls, missing, total, edges, values=None): for artist in ax.texts: label = artist.get_text() if not tokens(label).intersection( - {"outside", "excluded", "hors", "exclus", "exclues", "tronque"} + { + "outside", + "excluded", + "hors", + "exclus", + "exclues", + "tronque", + "tronquee", + "tronques", + "tronquees", + } ): continue vals = numbers(label) - if cls.casefold() in tokens(label) and missing in vals and total in vals: + number = r"\d+(?:[ \u202f\u00a0]\d{3})*(?:[.,]\d+)?\s*[kKM]?" + reports = [] + for pattern in [ + rf"(?:excluded|exclu\w*|outside)\s*({number})\s*(?:of|sur|out of)\s*({number})", + rf"({number})\s*(?:observations?\s+)?(?:exclu\w*|tronqu\w*)\s*(?:of|sur)\s*({number})", + ]: + reports.extend(re.findall(pattern, label, re.I)) + exact_counts = any( + numbers(a) == [missing] and numbers(b) == [total] for a, b in reports + ) + if cls.casefold() in tokens(label) and exact_counts: if bounds and all( any(abs(v - bound) <= max(5e-7, abs(bound) * 0.005) for v in vals) for bound in bounds @@ -184,7 +314,17 @@ def assert_visible_or_disclosed(ax, series): label = artist.get_text() ns = numbers(label) if not tokens(label).intersection( - {"outside", "excluded", "hors", "exclus", "clipped"} + { + "outside", + "excluded", + "hors", + "exclus", + "clipped", + "tronque", + "tronquee", + "tronques", + "tronquees", + } ): continue if len(clipped) > 1 and name.casefold() not in label.casefold(): @@ -206,15 +346,18 @@ def assert_cluster_encoding(fig, ax, labels, coordinates): """Accept colorbar, legend handles, or colored textual cluster annotations.""" from matplotlib.colors import to_rgba - legend = ax.get_legend() - entries = ( - [] - if legend is None - else list(zip(legend.legend_handles, [t.get_text() for t in legend.texts])) - ) + entries = [ + (handle, t.get_text()) + for legend in visible_legends(fig) + for handle, t in zip(legend.legend_handles, legend.texts) + if t.get_visible() + ] colorbars = [ - a._colorbar for a in fig.axes if getattr(a, "_colorbar", None) is not None + a._colorbar + for a in fig.axes + if a.get_visible() and getattr(a, "_colorbar", None) is not None ] + cluster_collections = {} for cid in sorted(set(labels) - {-1}): expected = coordinates[labels == cid] collection = next( @@ -226,40 +369,60 @@ def assert_cluster_encoding(fig, ax, labels, coordinates): None, ) assert collection is not None, f"Missing actual cluster {cid}" + cluster_collections[cid] = collection + # A physical colorbar is bound to an actual data-bearing collection. + # Standalone ScalarMappables cannot acquire that role through label wording. + physical = [ + sc + for a in fig.axes + for sc in a.collections + if sc not in cluster_collections.values() + and sc.get_array() is not None + and np.asarray(sc.get_array()).size + ] + categorical_bars = [cb for cb in colorbars if cb.mappable not in physical] + for cid, collection in cluster_collections.items(): rgb = collection.get_facecolors()[0, :3] - choices = [] - for cb in colorbars: - # Temperature colorbars are not categorical-ID encodings. - if re.search(r"cluster|\bid\b", cb.ax.get_ylabel(), re.I): - choices.append(cb.mappable.to_rgba(cid)[:3]) - if choices: - assert all( - np.allclose(choice, rgb) for choice in choices - ), f"Misleading colorbar for C{cid}" - continue + choices = [ + ("colorbar", cb.mappable.to_rgba(cid)[:3]) for cb in categorical_bars + ] for handle, label in entries: - if re.search(rf"\bC\s*{cid}\b|cluster\s*{cid}\b", label, re.I): + if re.match(rf"^(?:(?:C|cluster|groupe)\s*)?{cid}\b", label.strip(), re.I): if hasattr(handle, "get_facecolor"): choices.append( - np.asarray(handle.get_facecolor()).reshape(-1, 4)[0, :3] + ( + "categorical legend", + np.asarray(handle.get_facecolor()).reshape(-1, 4)[0, :3], + ) ) elif hasattr(handle, "get_color"): - choices.append(np.asarray(to_rgba(handle.get_color()))[:3]) - if choices: - assert all( - np.allclose(choice, rgb) for choice in choices - ), f"Misleading categorical legend for C{cid}" - continue - for annotation in ax.texts: - if re.fullmatch(rf"C\s*{cid}", annotation.get_text().strip(), re.I): + choices.append( + ( + "categorical legend", + np.asarray(to_rgba(handle.get_color()))[:3], + ) + ) + for annotation in [ + t for a in fig.axes if a.get_visible() for t in a.texts + ] + fig.texts: + if not annotation.get_visible(): + continue + if re.match( + rf"^(?:(?:C|cluster|groupe)\s*)?{cid}\b", + annotation.get_text().strip(), + re.I, + ): bbox = annotation.get_bbox_patch() choices.append( - np.asarray( - bbox.get_facecolor() - if bbox is not None - else to_rgba(annotation.get_color()) - )[:3] + ( + "annotation", + np.asarray( + bbox.get_facecolor() + if bbox is not None + else to_rgba(annotation.get_color()) + )[:3], + ) ) - assert any( - np.allclose(choice, rgb) for choice in choices - ), f"No faithful ID/color encoding for C{cid}" + assert choices, f"No faithful ID/color encoding for C{cid}" + for kind, value in choices: + assert np.allclose(value, rgb), f"Misleading {kind} for C{cid}" From fbe7526cb47680d42726482c398c9fa7c892449c Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Fri, 13 Nov 2026 13:59:56 -0500 Subject: [PATCH 8/8] docs(dimred): verify third M2.8 archive and green replay --- audit/M28_DIMRED_VISUALIZER.md | 2 + audit/M28_ROUND3_PROOFS.md | 14 +- audit/m28_r3_archive_verification.json | 45 + audit/m28_r3_green_joint_replay_results.json | 10427 +++++++++++++++++ audit/m28_r3_green_red_replay_results.json | 1245 ++ audit/m28_r3_green_validation_results.json | 151 + tests/proofs_dimred_visualizer.py | 472 - 7 files changed, 11879 insertions(+), 477 deletions(-) create mode 100644 audit/m28_r3_archive_verification.json create mode 100644 audit/m28_r3_green_joint_replay_results.json create mode 100644 audit/m28_r3_green_red_replay_results.json create mode 100644 audit/m28_r3_green_validation_results.json delete mode 100644 tests/proofs_dimred_visualizer.py diff --git a/audit/M28_DIMRED_VISUALIZER.md b/audit/M28_DIMRED_VISUALIZER.md index aec5555..ef50c2f 100644 --- a/audit/M28_DIMRED_VISUALIZER.md +++ b/audit/M28_DIMRED_VISUALIZER.md @@ -21,6 +21,8 @@ identified total-class density as a **proposed test policy awaiting scientific acceptance**; issue creation still requires explicit human approval. Complete advertised KDE regions must remain inside the displayed domain. The previous 61 nodes and resolved contracts remain; five focused adapter nodes are added. +New immutable third archive: **8e668780b181948856cacb58650b25a0e03eeddf**, verified on GitHub; prior archives unchanged. + Current local evidence: **66 green PASS with -W error**, full default/importlib **698 PASS / 62 deselected / 7 preexisting Gaia warnings**; reversed targeted 66 PASS. Prior 61 nodes preserved. M01-M16 16 KILLED; original C01-C14 14 PASS, diff --git a/audit/M28_ROUND3_PROOFS.md b/audit/M28_ROUND3_PROOFS.md index a6fa9af..fe802b5 100644 --- a/audit/M28_ROUND3_PROOFS.md +++ b/audit/M28_ROUND3_PROOFS.md @@ -24,10 +24,10 @@ Historical archives remain immutable: - `a8bc8506804cf4c89e784e458498d3f229ca81cb`, tag `audit/m28-review-proofs-2026-11-13`, baseline 25 FAIL / 1 PASS (26 cases). -Their JSON logs are not rewritten. A third snapshot will be designated on tag -`audit/m28-round3-proofs-2026-11-13`, pushed and read back before normal removal -of the explicit red proof file. The new snapshot will be an ancestor of the -same PR branch; no second M2.8 branch or PR is created. +Their JSON logs are not rewritten. The third snapshot is **8e668780b181948856cacb58650b25a0e03eeddf**, tag +`audit/m28-round3-proofs-2026-11-13`. Eight archived files were read back from +GitHub and their Git blob IDs verified before normal proof removal. The +snapshot is an ancestor of the same PR branch; no second M2.8 branch or PR is created. ## R1 - sampled population and complete probability contours @@ -227,7 +227,7 @@ python audit/check_m28_evidence.py --mode mutations --output test-results/m28-ro python audit/check_m28_evidence.py --mode proofs --output test-results/m28-round3-controls.json ``` -From the green head, add `--proofs-ref ` to the baseline/proof +From the green head, add `--proofs-ref 8e668780b181948856cacb58650b25a0e03eeddf` to the baseline/proof reconstruction commands, or to `check_m28_review.py` (optionally `--only JOINT JOINT_TOTAL`). The fixed tag is the default baseline ref once the proof file is absent. Replays restore exact archived tests, fixtures and helpers and verify @@ -238,3 +238,7 @@ proofs, mutation campaigns and lint of the four M2.8 audit scripts are separate local checks. Hosted logs and their actual head/merge SHA will be linked from PR #116 and the #43 handoff. This pass stops for Claude's short verification on K10, FD05, R6/R7 and R10. PR remains Draft, M2.8 yellow, #43 open, M2.9 untouched. + +[Archive/blob verification](m28_r3_archive_verification.json), [green-head red replay](m28_r3_green_red_replay_results.json) and [joint reconstructions](m28_r3_green_joint_replay_results.json) preserve exact replay evidence. + +After normal removal from the green head, exact archive reconstruction returned **25 FAIL / 1 PASS / 0 ERROR/SKIP**, and both JOINT and JOINT_TOTAL returned **92 PASS**. Protected-input guards passed. Green-head validation repeated **66 PASS with -W error**, both full suites **698 PASS / 62 deselected / 7 preexisting warnings**, Black/Ruff, pip check and protected-path diff PASS (`m28_r3_green_validation_results.json`). Hosted CI is recorded separately in PR #116 and the #43 handoff on the actual pushed green SHA. diff --git a/audit/m28_r3_archive_verification.json b/audit/m28_r3_archive_verification.json new file mode 100644 index 0000000..85989f2 --- /dev/null +++ b/audit/m28_r3_archive_verification.json @@ -0,0 +1,45 @@ +{ + "archive": "8e668780b181948856cacb58650b25a0e03eeddf", + "tag": "audit/m28-round3-proofs-2026-11-13", + "github_files_read_before_removal": [ + { + "path": "tests/proofs_dimred_visualizer.py", + "sha": "e582e6d0b2a6fc1f8f4aaee4a2a6522448282e25" + }, + { + "path": "tests/visualizer_review_contracts.py", + "sha": "cad42c53c0ca5926a5225573080d1a0496c9abd1" + }, + { + "path": "tests/test_dimred_visualizer.py", + "sha": "975212690ce00083d955e401317a7266a7fc254e" + }, + { + "path": "tests/test_visualizer_review_contracts.py", + "sha": "34a95fea86fcb21cde54b94f5622079e62582dd9" + }, + { + "path": "tests/conftest.py", + "sha": "0d44271a44abc9b8a55be3383d8a42bc58910ff6" + }, + { + "path": "audit/check_m28_review.py", + "sha": "54c83eb55ca13379d8f385a5b28943e7e6afd8f0" + }, + { + "path": "audit/M28_ROUND3_PROOFS.md", + "sha": "a6fa9afdbaf77e071831f48298a543a44bdb84a0" + }, + { + "path": "src/dimred/dimred_visualizer.py", + "sha": "624b857bca5833c3401204b0a592b9ae6ffc2902" + } + ], + "historical_json_checked_unchanged": 89, + "previous_archives": [ + "ed1d91ec0efb619aeb77a5bf7e4a0ab43fa84cac", + "a8bc8506804cf4c89e784e458498d3f229ca81cb" + ], + "production_unchanged": true, + "archived_test_hashes_match_frozen_execution": true +} diff --git a/audit/m28_r3_green_joint_replay_results.json b/audit/m28_r3_green_joint_replay_results.json new file mode 100644 index 0000000..663e817 --- /dev/null +++ b/audit/m28_r3_green_joint_replay_results.json @@ -0,0 +1,10427 @@ +{ + "active_head": "8e668780b181948856cacb58650b25a0e03eeddf", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "working_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "79671f840cc76d57ebdc1257b624c8de6078bc5db79023738f7128d3a77b0dec", + "tests/test_visualizer_review_contracts.py": "1d2818457af205945f30ea1774bab0aadcde707a4ded95f3bc92ac0c09e40e9a" + }, + "proofs_ref": "8e668780b181948856cacb58650b25a0e03eeddf", + "runner_lf_sha256": "9a2a2e41e9e87a965f6f345432f619db60c697456d883a3b3a56f6ba4c8540e9", + "runs": [ + { + "name": "JOINT_TOTAL", + "selection": "", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 154 + ], + [ + 185 + ], + [ + 288 + ], + [ + 869 + ], + [ + 1018 + ], + [ + 1087 + ], + [ + 1110 + ], + [ + 1178, + 1179 + ], + [ + 1252 + ], + [ + 1319 + ], + [ + 1414 + ], + [ + 1559 + ], + [ + 2019 + ], + [ + 2040 + ], + [ + 2068 + ], + [ + 2278 + ], + [ + 2320 + ], + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2527, + 2528 + ], + [ + 2816 + ], + [ + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833 + ], + [ + 2834 + ], + [ + 3039 + ], + [ + 3213 + ] + ], + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, 100 * ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"{n_thresh} PCs\\n\u2192 {pca_analyzer.explained_variance_ratio[:n_thresh].sum()*100:.1f}%\",\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n@@ -285,7 +285,7 @@\n df = df.sort_values(\"loading\")\n \n # Couleur encodant le signe physique de la contribution.\n- colors = [\"#DD8452\" if v < 0 else \"#4C72B0\" for v in df[\"loading\"]]\n+ colors = [\"#CC5500\" if v < 0 else \"#0055CC\" for v in df[\"loading\"]]\n fig, ax = plt.subplots(figsize=(8, max(4, n_top * 0.35)), dpi=self.dpi)\n \n ax.barh(\n@@ -869,7 +869,7 @@\n ax.text(\n lam,\n ymax * 0.88,\n- nom,\n+ nom.replace(chr(92)*2, chr(92)),\n rotation=90,\n fontsize=6,\n color=\"crimson\",\n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ fig.canvas.print_figure(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n@@ -1084,9 +1084,7 @@\n \"Autoencodeur \u2014 Historique d'entra\u00eenement (LAMOST DR5)\", fontsize=13, y=1.02\n )\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_training_history\")\n return fig, axes\n \n def plot_ae_embedding(self, Z, meta, y, save_path=None):\n@@ -1109,6 +1107,7 @@\n \n PALETTE = {\"STAR\": \"#4C72B0\", \"GALAXY\": \"#DD8452\", \"QSO\": \"#55A868\"}\n MARKERS = {\"STAR\": \"o\", \"GALAXY\": \"s\", \"QSO\": \"^\"}\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -1176,6 +1175,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in axes[len(idx):]:\n+ unused.set_visible(False)\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n@@ -1248,9 +1249,7 @@\n ax.legend(fontsize=9)\n ax.grid(True, alpha=0.3)\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_ae_vs_pca\")\n return fig, ax\n \n def plot_latent_interpolation(\n@@ -1317,7 +1316,7 @@\n classes = np.unique(y)\n palette = [\"#4C72B0\", \"#DD8452\", \"#55A868\", \"#C44E52\"]\n fig, ax = plt.subplots(figsize=(9, 5), dpi=self.dpi)\n- for cls, color in zip(classes, palette):\n+ for cls, color in zip(classes, palette*((len(classes)+len(palette)-1)//len(palette))):\n mask = y == cls\n vals = mse_per_sample[mask]\n # Histogrammes normalis\u00e9s pour comparer les formes de distribution.\n@@ -1413,7 +1412,7 @@\n ),\n )\n sm = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n@@ -1558,7 +1557,7 @@\n )\n ax.grid(True, alpha=0.2)\n sm2 = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm2.set_array([])\n plt.colorbar(\n@@ -2017,7 +2016,7 @@\n ncols = 4\n nrows = (n_show + ncols - 1) // ncols\n fig, axes = plt.subplots(nrows, ncols, figsize=(5 * ncols, 4 * nrows), dpi=120)\n- axes_flat = axes.flatten() if n_show > 1 else [axes]\n+ axes_flat = np.asarray(axes).ravel()\n \n for ax_i, cid in zip(axes_flat, top_cids):\n profile = cluster_means.loc[cid]\n@@ -2038,7 +2037,7 @@\n ax_i.set_xlabel(\"Score moyen (\u03c3)\", fontsize=8)\n ax_i.grid(axis=\"x\", alpha=0.3)\n ax_i.set_xlim(-3, 3)\n- for ax_i in axes_flat[n_show:]:\n+ for ax_i in axes_flat[len(top_cids):]:\n ax_i.axis(\"off\")\n fig.suptitle(\n \"Top-5 features caract\u00e9ristiques par cluster HDBSCAN\\n\"\n@@ -2066,7 +2065,7 @@\n \n # V\u00e9rifie si une vraie probabilit\u00e9 est disponible.\n classes_pred = sorted(set(y_pred))\n- has_proba = confidence is not None and not np.all(confidence == 1.0)\n+ has_proba = confidence is not None\n fig, axes = plt.subplots(1, 3, figsize=(22, 8), dpi=self.dpi)\n \n ax = axes[0]\n@@ -2276,7 +2275,7 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0, 1.01)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n@@ -2318,6 +2317,7 @@\n ]\n \n fig, axes = plt.subplots(1, 1 + len(available), figsize=(22, 5), dpi=self.dpi)\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2533,6 +2524,8 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ if not (len(X) == len(X_recon) == len(spectral_types)):\n+ raise RuntimeError(\"Observation alignment: incompatible lengths\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n@@ -2821,7 +2814,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(max(vals.min(), np.finfo(float).tiny)), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n@@ -2831,12 +2824,19 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls}: excluded {missing} of {len(vals)} outside support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n+ hist_kwargs = dict(density=True)\n+ if xscale == \"linear\":\n+ hist_kwargs = dict(density=False,weights=np.full(len(vals),1/(len(vals)*np.diff(bins)[0])))\n+ ax.text(.03,.12,f\"{cls}: density normalized by total {len(vals)}, support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n alpha=0.55,\n color=color,\n- density=True,\n+ **hist_kwargs,\n label=f\"{cls} m\u00e9diane={med:.3f}\",\n )\n # Marqueur central robuste pour chaque classe.\n@@ -3054,7 +3054,7 @@\n MS_G_HOT + (MS_G_COOL - MS_G_HOT) * 0.35,\n ),\n (T_LO + (T_HI - T_LO) * 0.25, MS_G_COOL - 0.10),\n- (T_LO + T_PAD, G_HI - T_PAD * 2),\n+ (T_LO + T_PAD, G_HI - G_PAD * 2),\n (T_LO + T_PAD, G_HI - G_PAD),\n (T_LO + (T_HI - T_LO) * 0.20, MS_G_COOL + MS_W * 0.6),\n (\n@@ -3212,7 +3212,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 population fournie\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "candidate_sha256": "ee8cd6d8f1ef1c46ee4090f4f586b985e2d03225f410542ee204556856af65d4", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_disclosure_identifies_the_relevant_exclusion_bound", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_localized_numbers_and_population_suffixes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_variance_claims_use_numbers_and_component_meaning", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[vertical]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[horizontal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_denominators_and_claims_are_distinguishable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x000001B3DDE117E0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x000001B3DC711C40>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:265: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000001B3DC733760>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:277: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:278: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:298: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:297: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:306: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:377: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1557/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1557/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:342: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:445: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:450: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:249: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "..................................................................FFFFFF [ 78%]\nFFFFFFFFF.FFFFFFFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x000001B3DDE117E0>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x000001B3DC711C40>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:265: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x000001B3DC733760>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:277: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:278: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:298: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:297: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:306: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:377: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1557/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1557/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:342: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:445: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:450: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:249: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-c2pwff_8\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n25 failed, 67 passed in 41.16s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_disclosure_identifies_the_relevant_exclusion_bound", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_localized_numbers_and_population_suffixes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_variance_claims_use_numbers_and_component_meaning", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[vertical]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[horizontal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_denominators_and_claims_are_distinguishable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1090, + 1092, + 1095, + 1096, + 1097, + 1098, + 1099, + 1102, + 1104, + 1105, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1126, + 1127, + 1128, + 1129, + 1131, + 1132, + 1133, + 1135, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1149, + 1150, + 1151, + 1153, + 1154, + 1155, + 1156, + 1158, + 1159, + 1162, + 1164, + 1165, + 1169, + 1171, + 1172, + 1173, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1195, + 1196, + 1197, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1211, + 1212, + 1215, + 1217, + 1219, + 1221, + 1222, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1232, + 1234, + 1236, + 1237, + 1239, + 1241, + 1242, + 1243, + 1244, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1252, + 1253, + 1255, + 1260, + 1261, + 1262, + 1266, + 1267, + 1268, + 1269, + 1271, + 1272, + 1274, + 1275, + 1277, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1285, + 1287, + 1288, + 1289, + 1291, + 1292, + 1293, + 1294, + 1295, + 1296, + 1298, + 1299, + 1300, + 1302, + 1303, + 1304, + 1305, + 1306, + 1308, + 1309, + 1312, + 1314, + 1316, + 1317, + 1318, + 1319, + 1320, + 1321, + 1323, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1332, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1343, + 1351, + 1356, + 1359, + 1360, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1371, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1386, + 1387, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1414, + 1415, + 1417, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1426, + 1427, + 1428, + 1429, + 1430, + 1432, + 1433, + 1434, + 1435, + 1437, + 1440, + 1441, + 1442, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1455, + 1456, + 1457, + 1458, + 1460, + 1461, + 1462, + 1463, + 1464, + 1466, + 1467, + 1468, + 1470, + 1475, + 1478, + 1481, + 1482, + 1483, + 1484, + 1485, + 1487, + 1488, + 1489, + 1490, + 1493, + 1494, + 1495, + 1498, + 1499, + 1501, + 1502, + 1504, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1516, + 1517, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1529, + 1530, + 1531, + 1532, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1558, + 1559, + 1560, + 1562, + 1563, + 1564, + 1565, + 1567, + 1568, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1582, + 1583, + 1584, + 1585, + 1587, + 1588, + 1589, + 1590, + 1592, + 1593, + 1594, + 1596, + 1599, + 1600, + 1601, + 1604, + 1605, + 1607, + 1608, + 1609, + 1612, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1620, + 1621, + 1622, + 1623, + 1624, + 1625, + 1627, + 1628, + 1629, + 1630, + 1631, + 1633, + 1634, + 1635, + 1636, + 1638, + 1643, + 1647, + 1648, + 1649, + 1650, + 1651, + 1652, + 1654, + 1655, + 1656, + 1657, + 1658, + 1660, + 1662, + 1664, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1675, + 1676, + 1678, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1690, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1703, + 1704, + 1705, + 1706, + 1707, + 1709, + 1711, + 1712, + 1714, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1724, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1736, + 1752, + 1753, + 1754, + 1755, + 1756, + 1757, + 1759, + 1761, + 1762, + 1763, + 1764, + 1765, + 1767, + 1768, + 1769, + 1771, + 1776, + 1777, + 1790, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1798, + 1799, + 1800, + 1801, + 1802, + 1803, + 1806, + 1808, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1819, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1832, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1845, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1854, + 1855, + 1856, + 1857, + 1860, + 1861, + 1862, + 1865, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1875, + 1876, + 1877, + 1879, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1890, + 1911, + 1912, + 1915, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1925, + 1927, + 1928, + 1931, + 1932, + 1933, + 1934, + 1935, + 1936, + 1938, + 1939, + 1940, + 1941, + 1942, + 1943, + 1945, + 1946, + 1947, + 1949, + 1951, + 1955, + 1956, + 1960, + 1961, + 1962, + 1963, + 1965, + 1966, + 1967, + 1969, + 1970, + 1972, + 1973, + 1974, + 1975, + 1976, + 1978, + 1979, + 1980, + 1982, + 1983, + 1984, + 1986, + 1987, + 1988, + 1989, + 1991, + 1992, + 1993, + 1995, + 1996, + 1998, + 1999, + 2000, + 2002, + 2006, + 2007, + 2011, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2021, + 2022, + 2024, + 2025, + 2026, + 2027, + 2028, + 2029, + 2031, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2045, + 2046, + 2048, + 2049, + 2050, + 2054, + 2061, + 2064, + 2067, + 2068, + 2069, + 2071, + 2072, + 2073, + 2075, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2085, + 2086, + 2087, + 2088, + 2089, + 2091, + 2092, + 2094, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2106, + 2107, + 2109, + 2112, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2121, + 2122, + 2124, + 2125, + 2127, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2136, + 2137, + 2139, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2148, + 2149, + 2150, + 2152, + 2153, + 2154, + 2155, + 2157, + 2158, + 2159, + 2161, + 2165, + 2169, + 2170, + 2171, + 2172, + 2174, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2185, + 2186, + 2188, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2198, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2206, + 2207, + 2208, + 2209, + 2213, + 2218, + 2219, + 2220, + 2223, + 2224, + 2226, + 2229, + 2230, + 2232, + 2233, + 2234, + 2235, + 2237, + 2238, + 2240, + 2241, + 2242, + 2243, + 2245, + 2246, + 2247, + 2249, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2259, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2268, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2278, + 2279, + 2280, + 2281, + 2282, + 2283, + 2287, + 2292, + 2296, + 2297, + 2298, + 2299, + 2301, + 2302, + 2303, + 2304, + 2305, + 2307, + 2308, + 2313, + 2314, + 2315, + 2316, + 2319, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2527, + 2528, + 2529, + 2543, + 2557, + 2558, + 2559, + 2560, + 2563, + 2564, + 2566, + 2567, + 2568, + 2569, + 2570, + 2571, + 2572, + 2574, + 2576, + 2577, + 2578, + 2581, + 2582, + 2591, + 2592, + 2593, + 2595, + 2596, + 2598, + 2602, + 2603, + 2604, + 2605, + 2606, + 2608, + 2611, + 2612, + 2614, + 2615, + 2616, + 2617, + 2618, + 2619, + 2620, + 2621, + 2622, + 2623, + 2624, + 2625, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2633, + 2634, + 2635, + 2637, + 2639, + 2640, + 2641, + 2642, + 2643, + 2644, + 2645, + 2646, + 2647, + 2649, + 2650, + 2651, + 2652, + 2654, + 2655, + 2657, + 2658, + 2659, + 2661, + 2662, + 2663, + 2665, + 2670, + 2671, + 2674, + 2675, + 2678, + 2679, + 2680, + 2711, + 2712, + 2715, + 2717, + 2718, + 2719, + 2720, + 2724, + 2725, + 2726, + 2727, + 2728, + 2729, + 2733, + 2734, + 2735, + 2736, + 2737, + 2738, + 2741, + 2742, + 2743, + 2744, + 2745, + 2746, + 2747, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2771, + 2772, + 2774, + 2775, + 2777, + 2778, + 2779, + 2780, + 2781, + 2782, + 2783, + 2785, + 2786, + 2787, + 2788, + 2790, + 2791, + 2792, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "........................................................................ [ 78%]\n.................... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-c2pwff_8\\result.xml -\n92 passed in 47.27s\n", + "stderr": "" + } + }, + { + "name": "JOINT", + "selection": "", + "admissible": true, + "classification": "PASS", + "reached_all_hunks": true, + "same_collection": true, + "changed_anchors": [ + [ + 154 + ], + [ + 185 + ], + [ + 288 + ], + [ + 869 + ], + [ + 1018 + ], + [ + 1087 + ], + [ + 1110 + ], + [ + 1178, + 1179 + ], + [ + 1252 + ], + [ + 1319 + ], + [ + 1414 + ], + [ + 1559 + ], + [ + 2019 + ], + [ + 2040 + ], + [ + 2068 + ], + [ + 2278 + ], + [ + 2320 + ], + [ + 2427 + ], + [ + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441 + ], + [ + 2527, + 2528 + ], + [ + 2816 + ], + [ + 2827, + 2828, + 2829 + ], + [ + 3035 + ], + [ + 3209 + ] + ], + "patch": "--- \n+++ \n@@ -151,7 +151,7 @@\n \n # Gauche : variance individuelle (barplot)\n ax = axes[0]\n- ax.bar(pcs, ratio * 100, color=\"#4C72B0\", alpha=0.75, width=0.85)\n+ ax.bar(pcs, 100 * ratio, color=\"#4C72B0\", alpha=0.75, width=0.85)\n ax.set_xlabel(\"Composante principale\")\n ax.set_ylabel(\"Variance expliqu\u00e9e (%)\")\n ax.set_title(\"Variance individuelle par PC\")\n@@ -184,7 +184,7 @@\n \n ax.annotate(\n # Le texte conserve la valeur r\u00e9elle de n_thresh, m\u00eame si la vue est tronqu\u00e9e.\n- f\"{n_thresh} PCs\\n\u2192 {cumvar[idx]*100:.1f}%\",\n+ f\"{n_thresh} PCs\\n\u2192 {pca_analyzer.explained_variance_ratio[:n_thresh].sum()*100:.1f}%\",\n xy=(n_thresh_plot, cumvar[idx] * 100),\n xytext=(n_thresh_plot + 2, cumvar[idx] * 100 - 8),\n fontsize=9,\n@@ -285,7 +285,7 @@\n df = df.sort_values(\"loading\")\n \n # Couleur encodant le signe physique de la contribution.\n- colors = [\"#DD8452\" if v < 0 else \"#4C72B0\" for v in df[\"loading\"]]\n+ colors = [\"#CC5500\" if v < 0 else \"#0055CC\" for v in df[\"loading\"]]\n fig, ax = plt.subplots(figsize=(8, max(4, n_top * 0.35)), dpi=self.dpi)\n \n ax.barh(\n@@ -869,7 +869,7 @@\n ax.text(\n lam,\n ymax * 0.88,\n- nom,\n+ nom.replace(chr(92)*2, chr(92)),\n rotation=90,\n fontsize=6,\n color=\"crimson\",\n@@ -1015,7 +1015,7 @@\n return\n \n path.parent.mkdir(parents=True, exist_ok=True)\n- fig.savefig(path, bbox_inches=\"tight\", dpi=self.dpi)\n+ fig.canvas.print_figure(path, bbox_inches=\"tight\", dpi=self.dpi)\n logger.info(\"Figure sauvegard\u00e9e : %s\", path)\n \n # ==================================================================\n@@ -1084,9 +1084,7 @@\n \"Autoencodeur \u2014 Historique d'entra\u00eenement (LAMOST DR5)\", fontsize=13, y=1.02\n )\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_training_history\")\n return fig, axes\n \n def plot_ae_embedding(self, Z, meta, y, save_path=None):\n@@ -1109,6 +1107,7 @@\n \n PALETTE = {\"STAR\": \"#4C72B0\", \"GALAXY\": \"#DD8452\", \"QSO\": \"#55A868\"}\n MARKERS = {\"STAR\": \"o\", \"GALAXY\": \"s\", \"QSO\": \"^\"}\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -1176,6 +1175,8 @@\n if n_samples == 1:\n axes = [axes]\n x_pos = np.arange(len(feature_names))\n+ for unused in axes[len(idx):]:\n+ unused.set_visible(False)\n for i, (ax, si) in enumerate(zip(axes, idx)):\n # Comparaison directe profil original vs reconstruit pour un spectre.\n orig = X[si]\n@@ -1248,9 +1249,7 @@\n ax.legend(fontsize=9)\n ax.grid(True, alpha=0.3)\n plt.tight_layout()\n- if save_path is not None:\n- fig.savefig(save_path, bbox_inches=\"tight\", dpi=self.dpi)\n- logger.info(\"Figure sauvegard\u00e9e : %s\", save_path)\n+ self._save(fig,save_path,\"plot_ae_vs_pca\")\n return fig, ax\n \n def plot_latent_interpolation(\n@@ -1317,7 +1316,7 @@\n classes = np.unique(y)\n palette = [\"#4C72B0\", \"#DD8452\", \"#55A868\", \"#C44E52\"]\n fig, ax = plt.subplots(figsize=(9, 5), dpi=self.dpi)\n- for cls, color in zip(classes, palette):\n+ for cls, color in zip(classes, palette*((len(classes)+len(palette)-1)//len(palette))):\n mask = y == cls\n vals = mse_per_sample[mask]\n # Histogrammes normalis\u00e9s pour comparer les formes de distribution.\n@@ -1413,7 +1412,7 @@\n ),\n )\n sm = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm.set_array([])\n # Colorbar d\u00e9di\u00e9e aux IDs, ind\u00e9pendante de la coloration r\u00e9elle par map.\n@@ -1558,7 +1557,7 @@\n )\n ax.grid(True, alpha=0.2)\n sm2 = plt.cm.ScalarMappable(\n- cmap=cmap_c, norm=mcolors.Normalize(vmin=0, vmax=n - 1)\n+ cmap=mcolors.ListedColormap([color_map[c] for c in cluster_ids] or [(0.8,0.8,0.8,1)]), norm=mcolors.BoundaryNorm(([cluster_ids[0]-.5]+[(a+b)/2 for a,b in zip(cluster_ids[:-1],cluster_ids[1:])]+[cluster_ids[-1]+.5]) if cluster_ids else [-.5,.5], max(1,len(cluster_ids)))\n )\n sm2.set_array([])\n plt.colorbar(\n@@ -2017,7 +2016,7 @@\n ncols = 4\n nrows = (n_show + ncols - 1) // ncols\n fig, axes = plt.subplots(nrows, ncols, figsize=(5 * ncols, 4 * nrows), dpi=120)\n- axes_flat = axes.flatten() if n_show > 1 else [axes]\n+ axes_flat = np.asarray(axes).ravel()\n \n for ax_i, cid in zip(axes_flat, top_cids):\n profile = cluster_means.loc[cid]\n@@ -2038,7 +2037,7 @@\n ax_i.set_xlabel(\"Score moyen (\u03c3)\", fontsize=8)\n ax_i.grid(axis=\"x\", alpha=0.3)\n ax_i.set_xlim(-3, 3)\n- for ax_i in axes_flat[n_show:]:\n+ for ax_i in axes_flat[len(top_cids):]:\n ax_i.axis(\"off\")\n fig.suptitle(\n \"Top-5 features caract\u00e9ristiques par cluster HDBSCAN\\n\"\n@@ -2066,7 +2065,7 @@\n \n # V\u00e9rifie si une vraie probabilit\u00e9 est disponible.\n classes_pred = sorted(set(y_pred))\n- has_proba = confidence is not None and not np.all(confidence == 1.0)\n+ has_proba = confidence is not None\n fig, axes = plt.subplots(1, 3, figsize=(22, 8), dpi=self.dpi)\n \n ax = axes[0]\n@@ -2276,7 +2275,7 @@\n fontsize=12,\n fontweight=\"bold\",\n )\n- ax.set_ylim(0.75, 1.01)\n+ ax.set_ylim(0, 1.01)\n ax.legend(fontsize=10, framealpha=0.9)\n ax.grid(True, alpha=0.25)\n plt.tight_layout()\n@@ -2318,6 +2317,7 @@\n ]\n \n fig, axes = plt.subplots(1, 1 + len(available), figsize=(22, 5), dpi=self.dpi)\n+ axes = np.atleast_1d(axes)\n ax = axes[0]\n for cls in np.unique(y):\n mask = y == cls\n@@ -2424,30 +2424,21 @@\n kde = gaussian_kde(Z_stars[idx].T, bw_method=\"scott\")\n \n p1, p99 = np.percentile(Z_stars, [1, 99], axis=0)\n- margin = (p99 - p1) * 0.15\n+ margin = (p99 - p1) * 0.8\n x_grid = np.linspace(p1[0] - margin[0], p99[0] + margin[0], 200)\n y_grid = np.linspace(p1[1] - margin[1], p99[1] + margin[1], 200)\n XX, YY = np.meshgrid(x_grid, y_grid)\n ZZ = kde(np.vstack([XX.ravel(), YY.ravel()])).reshape(XX.shape)\n \n- zz_flat = ZZ.ravel()\n- zz_flat = zz_flat[zz_flat > 0]\n- levels = (\n- []\n- if len(zz_flat) == 0\n- else sorted(\n- set(\n- [\n- float(np.percentile(zz_flat, 1)),\n- float(np.percentile(zz_flat, 5)),\n- float(np.percentile(zz_flat, 32)),\n- ]\n- )\n- )\n- )\n- if len(levels) < 2:\n- # Si la densit\u00e9 est trop plate, on d\u00e9sactive les contours nominaux.\n- levels = []\n+ center = Z_stars.mean(axis=0)\n+ scale = Z_stars.std(axis=0)\n+ qx = np.linspace(center[0]-8*scale[0], center[0]+8*scale[0], 401)\n+ qy = np.linspace(center[1]-8*scale[1], center[1]+8*scale[1], 401)\n+ a, b = np.meshgrid(qx, qy)\n+ density = kde(np.vstack([a.ravel(), b.ravel()]))\n+ ordered = np.sort(density)[::-1]\n+ mass = np.cumsum(ordered)/ordered.sum()\n+ levels = sorted([float(ordered[np.searchsorted(mass,p)]) for p in [.68,.95,.99]])\n \n params = [\n (teff_s, \"T_eff (K)\", \"plasma\", \"Densit\u00e9 + T_eff\"),\n@@ -2533,6 +2524,8 @@\n save_path=None,\n ):\n \"\"\"Profil moyen original vs reconstruit par type spectral A/F/G/K/M.\"\"\"\n+ if not (len(X) == len(X_recon) == len(spectral_types)):\n+ raise RuntimeError(\"Observation alignment: incompatible lengths\")\n RECON_FEATURES = [\n \"feature_H\u03b1_eq_width\",\n \"feature_H\u03b2_eq_width\",\n@@ -2821,7 +2814,7 @@\n if xscale == \"log\":\n # Bins logarithmiques pour visualiser les queues longues.\n bins = np.logspace(\n- np.log10(max(vals.min(), 1e-4)), np.log10(vals.max() + 1), 60\n+ np.log10(max(vals.min(), np.finfo(float).tiny)), np.log10(vals.max() + 1), 60\n )\n else:\n # \u00c9chelle lin\u00e9aire born\u00e9e sur le c\u0153ur de distribution (P99 \u00e9toiles).\n@@ -2831,6 +2824,9 @@\n else vals.max()\n )\n bins = np.linspace(0, star_p99 * 1.5, 60)\n+ missing = int(((valsbins[-1])).sum())\n+ if missing:\n+ ax.text(.03,.05,f\"{cls}: excluded {missing} of {len(vals)} outside support {bins[0]:.6f} to {bins[-1]:.6f}\",transform=ax.transAxes)\n ax.hist(\n vals,\n bins=bins,\n@@ -3054,7 +3050,7 @@\n MS_G_HOT + (MS_G_COOL - MS_G_HOT) * 0.35,\n ),\n (T_LO + (T_HI - T_LO) * 0.25, MS_G_COOL - 0.10),\n- (T_LO + T_PAD, G_HI - T_PAD * 2),\n+ (T_LO + T_PAD, G_HI - G_PAD * 2),\n (T_LO + T_PAD, G_HI - G_PAD),\n (T_LO + (T_HI - T_LO) * 0.20, MS_G_COOL + MS_W * 0.6),\n (\n@@ -3212,7 +3208,7 @@\n ax.set_ylabel(r\"$\\log\\,g$ (dex)\", fontsize=13)\n ax.set_title(\n \"Diagramme de Hertzsprung-Russell\\n\"\n- r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 43 019 \u00e9toiles\",\n+ r\"LAMOST DR5 $\\times$ Gaia DR3 \u00b7 population fournie\",\n fontsize=13,\n fontweight=\"bold\",\n )\n", + "candidate_sha256": "04819374396458c23ba09c497ba30fa716fe9d573deccc858102813eaad97309", + "baseline_kind": "original production", + "baseline_source_sha256": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_disclosure_identifies_the_relevant_exclusion_bound", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_localized_numbers_and_population_suffixes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_variance_claims_use_numbers_and_component_meaning", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[vertical]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[horizontal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_denominators_and_claims_are_distinguishable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x0000011F015A8C80>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x0000011FAEA1EF80>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:265: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x0000011FAEA95460>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:277: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:278: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:298: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:297: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:306: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:377: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1563/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1563/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:342: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:445: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:450: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:249: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1089, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1113, + 1114, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1127, + 1128, + 1129, + 1130, + 1132, + 1133, + 1134, + 1136, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1150, + 1151, + 1152, + 1154, + 1155, + 1156, + 1157, + 1159, + 1160, + 1163, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1177, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1275, + 1276, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1286, + 1288, + 1289, + 1290, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1299, + 1300, + 1301, + 1303, + 1304, + 1305, + 1306, + 1307, + 1309, + 1310, + 1313, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1490, + 1491, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1605, + 1606, + 1608, + 1609, + 1610, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1628, + 1629, + 1630, + 1631, + 1632, + 1634, + 1635, + 1636, + 1637, + 1639, + 1644, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1655, + 1656, + 1657, + 1658, + 1659, + 1661, + 1663, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1676, + 1677, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1704, + 1705, + 1706, + 1707, + 1708, + 1710, + 1712, + 1713, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1737, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1760, + 1762, + 1763, + 1764, + 1765, + 1766, + 1768, + 1769, + 1770, + 1772, + 1777, + 1778, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1807, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1855, + 1856, + 1857, + 1858, + 1861, + 1862, + 1863, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1876, + 1877, + 1878, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1891, + 1912, + 1913, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1926, + 1928, + 1929, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1946, + 1947, + 1948, + 1950, + 1952, + 1956, + 1957, + 1961, + 1962, + 1963, + 1964, + 1966, + 1967, + 1968, + 1970, + 1971, + 1973, + 1974, + 1975, + 1976, + 1977, + 1979, + 1980, + 1981, + 1983, + 1984, + 1985, + 1987, + 1988, + 1989, + 1990, + 1992, + 1993, + 1994, + 1996, + 1997, + 1999, + 2000, + 2001, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2107, + 2108, + 2110, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2170, + 2171, + 2172, + 2173, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2186, + 2187, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2207, + 2208, + 2209, + 2210, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2315, + 2316, + 2317, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2584, + 2585, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2681, + 2682, + 2685, + 2686, + 2687, + 2718, + 2719, + 2722, + 2724, + 2725, + 2726, + 2727, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2778, + 2779, + 2781, + 2782, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2792, + 2793, + 2794, + 2795, + 2797, + 2798, + 2799, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2873, + 2875, + 2876, + 2877, + 2878, + 2879, + 2881, + 2883, + 2884, + 2886, + 2887, + 2889, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2910, + 2911, + 2912, + 2913, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2928, + 2930, + 2932, + 2934, + 2935, + 2936, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2970, + 2971, + 2972, + 2974, + 2975, + 2977, + 2978, + 2980, + 2981, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3005, + 3006, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "..................................................................FFFFFF [ 78%]\nFFFFFFFFF.FFFFFFFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x0000011F015A8C80>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x0000011FAEA1EF80>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:265: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x0000011FAEA95460>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:277: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:278: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:298: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:297: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:306: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:377: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1563/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1563/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:342: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:445: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:450: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:249: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-c2pwff_8\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n25 failed, 67 passed in 34.70s\n", + "stderr": "" + }, + "candidate": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 0, + "cases": [ + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[classes]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[continuous]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_embedding_exact_observation_associations[plain]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_grid_and_ae_color_pairing_under_coherent_permutation[order1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_finite_triplets_and_physical_axes[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_missing_columns_refused", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_pca_variance_and_reconstruction_energy", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_signed_loadings_selection_and_sign_equivariance", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_family_weights_bar_and_donut_angles", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_correlation_matrix_axes_values_and_missing_annotations", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_eigenspectra_coordinates_variance_and_line_positions[10]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_training_history_minimum_is_not_last_and_distinct_series[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[3]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_reconstruction_drawn_rows_and_manual_mse[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_ae_pca_comparison_does_not_substitute_metrics", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_interpolation_actual_path_feature_order_and_endpoints", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_error_family_mean_is_feature_weighted_and_std_is_between_features", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_spectral_type_means_for_aligned_unequal_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_histogram_densities_integrate_and_class_mean_median_are_distinct", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_real_analyzer_state_and_point_populations[labels2]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_presentation_and_split_consistent_populations[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_hr_values_and_temperature_overlay", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hdbscan_sensitivity_exact_columns_and_marked_parameters", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_heatmap_discriminating_columns_counts_and_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_cluster_profiles_signed_top_five_not_first_five", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[None]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_xgboost_classes_confidence_and_cluster_associations[confidence1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_fg_population_threshold_and_overlays", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[12]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_sklearn_trustworthiness_independent_rank_oracle[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[5]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_trustworthiness_impossible_neighbors_explicit_refusal[8]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_stability_producer_order_and_mean_without_reference", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_synthesis_preserves_distinct_geometries_and_physical_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_export_readable_and_same_semantic_figure[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_save_defaults_override_no_output_and_write_failure", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_real_kde_reproducible_star_selection_and_observation_colors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[png]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_direct_ae_export_real_file_and_history_preserved[pdf]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_hr_regions_scatter_preserves_input_triplets_despite_geometry_defect", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_dimred_visualizer::test_analytic_normal_mass_oracle_has_known_solution", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_analytic_estimator_protocol_is_probability_consistent", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[t-SNE outside range below 0.75; minimum 0.500-True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[Warning: clipped values-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_clipping_disclosure_requires_actual_bound_and_extreme[T(k) < 0.75 hors champ : min = 0.700-False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[False]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_categorical_legend_maps_ids_to_actual_data_colors[True]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_disclosure_identifies_the_relevant_exclusion_bound", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_localized_numbers_and_population_suffixes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_variance_claims_use_numbers_and_component_meaning", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[vertical]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_all_categorical_representations_must_agree[horizontal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.test_visualizer_review_contracts::test_histogram_denominators_and_claims_are_distinguishable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "PASS", + "message": "" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 227, + 231, + 232, + 233, + 236, + 238, + 239, + 242, + 243, + 244, + 245, + 246, + 247, + 249, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 259, + 260, + 262, + 263, + 264, + 270, + 273, + 274, + 275, + 283, + 285, + 288, + 289, + 291, + 292, + 294, + 295, + 296, + 297, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 312, + 313, + 314, + 316, + 321, + 325, + 327, + 328, + 330, + 331, + 333, + 334, + 335, + 337, + 338, + 339, + 341, + 346, + 350, + 351, + 352, + 355, + 356, + 359, + 361, + 362, + 363, + 364, + 366, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 392, + 393, + 394, + 395, + 396, + 397, + 399, + 400, + 401, + 403, + 404, + 406, + 407, + 408, + 410, + 411, + 412, + 418, + 421, + 422, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 450, + 453, + 454, + 455, + 458, + 459, + 461, + 462, + 463, + 464, + 465, + 468, + 469, + 470, + 471, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 483, + 484, + 485, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 520, + 522, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 539, + 541, + 543, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 564, + 565, + 567, + 571, + 572, + 575, + 576, + 577, + 578, + 580, + 581, + 582, + 588, + 593, + 594, + 595, + 596, + 597, + 610, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 625, + 626, + 627, + 630, + 631, + 634, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 651, + 652, + 653, + 654, + 655, + 658, + 659, + 660, + 662, + 663, + 664, + 665, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 686, + 687, + 689, + 690, + 691, + 692, + 693, + 696, + 699, + 700, + 701, + 702, + 704, + 705, + 706, + 712, + 715, + 725, + 726, + 728, + 729, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 744, + 745, + 746, + 747, + 748, + 749, + 752, + 753, + 754, + 760, + 763, + 773, + 775, + 776, + 777, + 779, + 780, + 783, + 796, + 797, + 798, + 799, + 800, + 802, + 803, + 804, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 885, + 886, + 892, + 896, + 897, + 898, + 907, + 908, + 909, + 912, + 913, + 914, + 917, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 929, + 932, + 933, + 934, + 935, + 936, + 937, + 939, + 942, + 943, + 944, + 950, + 952, + 953, + 954, + 956, + 957, + 958, + 959, + 961, + 962, + 963, + 964, + 966, + 967, + 968, + 969, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 982, + 983, + 984, + 985, + 987, + 989, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 1001, + 1008, + 1009, + 1010, + 1012, + 1015, + 1017, + 1018, + 1019, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1074, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1083, + 1084, + 1086, + 1087, + 1088, + 1090, + 1092, + 1095, + 1096, + 1097, + 1098, + 1099, + 1102, + 1104, + 1105, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1126, + 1127, + 1128, + 1129, + 1131, + 1132, + 1133, + 1135, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1149, + 1150, + 1151, + 1153, + 1154, + 1155, + 1156, + 1158, + 1159, + 1162, + 1164, + 1165, + 1169, + 1171, + 1172, + 1173, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1195, + 1196, + 1197, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1211, + 1212, + 1215, + 1217, + 1219, + 1221, + 1222, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1232, + 1234, + 1236, + 1237, + 1239, + 1241, + 1242, + 1243, + 1244, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1252, + 1253, + 1255, + 1260, + 1261, + 1262, + 1266, + 1267, + 1268, + 1269, + 1271, + 1272, + 1274, + 1275, + 1277, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1285, + 1287, + 1288, + 1289, + 1291, + 1292, + 1293, + 1294, + 1295, + 1296, + 1298, + 1299, + 1300, + 1302, + 1303, + 1304, + 1305, + 1306, + 1308, + 1309, + 1312, + 1314, + 1316, + 1317, + 1318, + 1319, + 1320, + 1321, + 1323, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1332, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1343, + 1351, + 1356, + 1359, + 1360, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1371, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1386, + 1387, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1414, + 1415, + 1417, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1426, + 1427, + 1428, + 1429, + 1430, + 1432, + 1433, + 1434, + 1435, + 1437, + 1440, + 1441, + 1442, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1455, + 1456, + 1457, + 1458, + 1460, + 1461, + 1462, + 1463, + 1464, + 1466, + 1467, + 1468, + 1470, + 1475, + 1478, + 1481, + 1482, + 1483, + 1484, + 1485, + 1487, + 1488, + 1489, + 1490, + 1493, + 1494, + 1495, + 1498, + 1499, + 1501, + 1502, + 1504, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1516, + 1517, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1529, + 1530, + 1531, + 1532, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1558, + 1559, + 1560, + 1562, + 1563, + 1564, + 1565, + 1567, + 1568, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1582, + 1583, + 1584, + 1585, + 1587, + 1588, + 1589, + 1590, + 1592, + 1593, + 1594, + 1596, + 1599, + 1600, + 1601, + 1604, + 1605, + 1607, + 1608, + 1609, + 1612, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1620, + 1621, + 1622, + 1623, + 1624, + 1625, + 1627, + 1628, + 1629, + 1630, + 1631, + 1633, + 1634, + 1635, + 1636, + 1638, + 1643, + 1647, + 1648, + 1649, + 1650, + 1651, + 1652, + 1654, + 1655, + 1656, + 1657, + 1658, + 1660, + 1662, + 1664, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1675, + 1676, + 1678, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1690, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1703, + 1704, + 1705, + 1706, + 1707, + 1709, + 1711, + 1712, + 1714, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1724, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1736, + 1752, + 1753, + 1754, + 1755, + 1756, + 1757, + 1759, + 1761, + 1762, + 1763, + 1764, + 1765, + 1767, + 1768, + 1769, + 1771, + 1776, + 1777, + 1790, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1798, + 1799, + 1800, + 1801, + 1802, + 1803, + 1806, + 1808, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1819, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1832, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1845, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1854, + 1855, + 1856, + 1857, + 1860, + 1861, + 1862, + 1865, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1875, + 1876, + 1877, + 1879, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1890, + 1911, + 1912, + 1915, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1925, + 1927, + 1928, + 1931, + 1932, + 1933, + 1934, + 1935, + 1936, + 1938, + 1939, + 1940, + 1941, + 1942, + 1943, + 1945, + 1946, + 1947, + 1949, + 1951, + 1955, + 1956, + 1960, + 1961, + 1962, + 1963, + 1965, + 1966, + 1967, + 1969, + 1970, + 1972, + 1973, + 1974, + 1975, + 1976, + 1978, + 1979, + 1980, + 1982, + 1983, + 1984, + 1986, + 1987, + 1988, + 1989, + 1991, + 1992, + 1993, + 1995, + 1996, + 1998, + 1999, + 2000, + 2002, + 2006, + 2007, + 2011, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2021, + 2022, + 2024, + 2025, + 2026, + 2027, + 2028, + 2029, + 2031, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2045, + 2046, + 2048, + 2049, + 2050, + 2054, + 2061, + 2064, + 2067, + 2068, + 2069, + 2071, + 2072, + 2073, + 2075, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2085, + 2086, + 2087, + 2088, + 2089, + 2091, + 2092, + 2094, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2106, + 2107, + 2109, + 2112, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2121, + 2122, + 2124, + 2125, + 2127, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2136, + 2137, + 2139, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2148, + 2149, + 2150, + 2152, + 2153, + 2154, + 2155, + 2157, + 2158, + 2159, + 2161, + 2165, + 2169, + 2170, + 2171, + 2172, + 2174, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2185, + 2186, + 2188, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2198, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2206, + 2207, + 2208, + 2209, + 2213, + 2218, + 2219, + 2220, + 2223, + 2224, + 2226, + 2229, + 2230, + 2232, + 2233, + 2234, + 2235, + 2237, + 2238, + 2240, + 2241, + 2242, + 2243, + 2245, + 2246, + 2247, + 2249, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2259, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2268, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2278, + 2279, + 2280, + 2281, + 2282, + 2283, + 2287, + 2292, + 2296, + 2297, + 2298, + 2299, + 2301, + 2302, + 2303, + 2304, + 2305, + 2307, + 2308, + 2313, + 2314, + 2315, + 2316, + 2319, + 2320, + 2321, + 2322, + 2323, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2344, + 2345, + 2346, + 2347, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2370, + 2371, + 2372, + 2374, + 2375, + 2376, + 2377, + 2378, + 2380, + 2381, + 2383, + 2384, + 2386, + 2387, + 2388, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2443, + 2444, + 2445, + 2446, + 2448, + 2449, + 2450, + 2451, + 2454, + 2455, + 2456, + 2458, + 2459, + 2460, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2475, + 2476, + 2478, + 2479, + 2481, + 2482, + 2484, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2507, + 2508, + 2510, + 2511, + 2512, + 2514, + 2515, + 2516, + 2518, + 2524, + 2527, + 2528, + 2529, + 2543, + 2557, + 2558, + 2559, + 2560, + 2563, + 2564, + 2566, + 2567, + 2568, + 2569, + 2570, + 2571, + 2572, + 2574, + 2576, + 2577, + 2578, + 2581, + 2582, + 2591, + 2592, + 2593, + 2595, + 2596, + 2598, + 2602, + 2603, + 2604, + 2605, + 2606, + 2608, + 2611, + 2612, + 2614, + 2615, + 2616, + 2617, + 2618, + 2619, + 2620, + 2621, + 2622, + 2623, + 2624, + 2625, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2633, + 2634, + 2635, + 2637, + 2639, + 2640, + 2641, + 2642, + 2643, + 2644, + 2645, + 2646, + 2647, + 2649, + 2650, + 2651, + 2652, + 2654, + 2655, + 2657, + 2658, + 2659, + 2661, + 2662, + 2663, + 2665, + 2670, + 2671, + 2674, + 2675, + 2678, + 2679, + 2680, + 2711, + 2712, + 2715, + 2717, + 2718, + 2719, + 2720, + 2724, + 2725, + 2726, + 2727, + 2728, + 2729, + 2733, + 2734, + 2735, + 2736, + 2737, + 2738, + 2741, + 2742, + 2743, + 2744, + 2745, + 2746, + 2747, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2771, + 2772, + 2774, + 2775, + 2777, + 2778, + 2779, + 2780, + 2781, + 2782, + 2783, + 2785, + 2786, + 2787, + 2788, + 2790, + 2791, + 2792, + 2794, + 2798, + 2801, + 2802, + 2803, + 2804, + 2805, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2816, + 2817, + 2821, + 2822, + 2823, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2855, + 2856, + 2857, + 2859, + 2865, + 2866, + 2869, + 2871, + 2872, + 2873, + 2874, + 2875, + 2877, + 2879, + 2880, + 2882, + 2883, + 2885, + 2891, + 2892, + 2893, + 2894, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2906, + 2907, + 2908, + 2909, + 2911, + 2912, + 2913, + 2914, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2924, + 2926, + 2928, + 2930, + 2931, + 2932, + 2942, + 2943, + 2944, + 2945, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2954, + 2955, + 2956, + 2957, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2966, + 2967, + 2968, + 2970, + 2971, + 2973, + 2974, + 2976, + 2977, + 2979, + 2982, + 2995, + 2996, + 2997, + 2999, + 3000, + 3001, + 3002, + 3004, + 3005, + 3006, + 3011, + 3012, + 3013, + 3014, + 3016, + 3017, + 3026, + 3027, + 3028, + 3031, + 3034, + 3035, + 3037, + 3038, + 3039, + 3040, + 3041, + 3042, + 3043, + 3044, + 3046, + 3047, + 3048, + 3049, + 3050, + 3052, + 3053, + 3054, + 3055, + 3056, + 3057, + 3058, + 3060, + 3064, + 3065, + 3066, + 3067, + 3068, + 3069, + 3070, + 3071, + 3073, + 3074, + 3075, + 3076, + 3077, + 3078, + 3082, + 3083, + 3084, + 3085, + 3086, + 3087, + 3088, + 3089, + 3091, + 3092, + 3093, + 3094, + 3095, + 3096, + 3097, + 3101, + 3102, + 3103, + 3104, + 3105, + 3106, + 3107, + 3108, + 3110, + 3111, + 3112, + 3113, + 3114, + 3115, + 3116, + 3122, + 3125, + 3138, + 3139, + 3140, + 3141, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3151, + 3152, + 3153, + 3156, + 3157, + 3158, + 3159, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3167, + 3168, + 3169, + 3170, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3184, + 3185, + 3186, + 3187, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3199, + 3200, + 3201, + 3202, + 3204, + 3205, + 3207, + 3208, + 3209, + 3210, + 3212, + 3213, + 3215, + 3216, + 3218, + 3219 + ], + "stdout": "........................................................................ [ 78%]\n.................... [100%]\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-review-synthetic-c2pwff_8\\result.xml -\n92 passed in 42.88s\n", + "stderr": "" + } + } + ], + "executed_hashes": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/proofs_dimred_visualizer.py": "2ece4074314b52b26994bb1593e941e6b008e21d70dbc8de7b89d7fd6a3937fd", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/visualizer_review_contracts.py": "79671f840cc76d57ebdc1257b624c8de6078bc5db79023738f7128d3a77b0dec", + "tests/test_visualizer_review_contracts.py": "1d2818457af205945f30ea1774bab0aadcde707a4ded95f3bc92ac0c09e40e9a" + }, + "protected_unchanged": true +} diff --git a/audit/m28_r3_green_red_replay_results.json b/audit/m28_r3_green_red_replay_results.json new file mode 100644 index 0000000..7922333 --- /dev/null +++ b/audit/m28_r3_green_red_replay_results.json @@ -0,0 +1,1245 @@ +{ + "active_head": "8e668780b181948856cacb58650b25a0e03eeddf", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "tested_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6" + }, + "mode": "baseline", + "runs": [], + "proofs_ref": "8e668780b181948856cacb58650b25a0e03eeddf", + "executed_files_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/proofs_dimred_visualizer.py": "2ece4074314b52b26994bb1593e941e6b008e21d70dbc8de7b89d7fd6a3937fd", + "tests/visualizer_review_contracts.py": "79671f840cc76d57ebdc1257b624c8de6078bc5db79023738f7128d3a77b0dec", + "tests/test_visualizer_review_contracts.py": "1d2818457af205945f30ea1774bab0aadcde707a4ded95f3bc92ac0c09e40e9a" + }, + "baseline": { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/proofs_dimred_visualizer.py", + "-p", + "m28_trace", + "-k", + "", + "--tb=short", + "--junitxml=result.xml" + ], + "returncode": 1, + "cases": [ + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[gaussian]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture31]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture7]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_kde_labeled_regions_enclose_probability_mass[mixture83]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_region_vertices_have_gravity_units_and_stay_in_domain", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[6]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x00000256DECA44A0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_hr_population_title_is_counted_or_omitted[9]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x00000256E5D2EA40>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_reconstruction_cardinality_cannot_reassign_spectral_classes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2" + }, + { + "id": "tests.proofs_dimred_visualizer::test_actual_unit_confidence_is_not_claimed_unavailable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:265: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x00000256E5D2D0E0>)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:277: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:278: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:298: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:297: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[0]", + "status": "PASS", + "message": "" + }, + { + "id": "tests.proofs_dimred_visualizer::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:306: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible" + }, + { + "id": "tests.proofs_dimred_visualizer::test_more_reconstructions_than_rows_has_no_empty_measurement_axes", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines" + }, + { + "id": "tests.proofs_dimred_visualizer::test_truncated_variance_annotation_does_not_attribute_wrong_mass", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)" + }, + { + "id": "tests.proofs_dimred_visualizer::test_log_histogram_keeps_small_positive_errors", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report" + }, + { + "id": "tests.proofs_dimred_visualizer::test_histogram_does_not_silently_omit_fifth_class", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:377: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_training_history]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1558/test_default_output_directory_0').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1558/test_default_output_directory_1').glob" + }, + { + "id": "tests.proofs_dimred_visualizer::test_trustworthiness_axis_contains_computed_values", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:342: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))" + }, + { + "id": "tests.proofs_dimred_visualizer::test_default_eigenspectrum_line_labels_are_renderable", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:445: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:450: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False" + }, + { + "id": "tests.proofs_dimred_visualizer::test_linear_histogram_truncation_discloses_population", + "status": "FAILURE", + "message": "tests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:249: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion" + } + ], + "executed_lines": [ + 1, + 33, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 45, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 69, + 70, + 71, + 72, + 73, + 76, + 77, + 78, + 79, + 80, + 84, + 85, + 100, + 102, + 103, + 104, + 105, + 108, + 109, + 110, + 112, + 113, + 115, + 121, + 124, + 125, + 126, + 141, + 143, + 144, + 147, + 150, + 153, + 154, + 155, + 156, + 157, + 158, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 171, + 172, + 173, + 174, + 175, + 176, + 179, + 182, + 183, + 185, + 187, + 188, + 189, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 198, + 199, + 201, + 202, + 204, + 206, + 207, + 213, + 216, + 217, + 218, + 270, + 273, + 274, + 275, + 316, + 321, + 341, + 346, + 418, + 421, + 422, + 491, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 588, + 593, + 594, + 595, + 596, + 597, + 712, + 715, + 760, + 763, + 810, + 814, + 815, + 816, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 846, + 848, + 849, + 851, + 852, + 854, + 855, + 856, + 857, + 859, + 860, + 861, + 862, + 864, + 865, + 866, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 880, + 881, + 882, + 884, + 892, + 896, + 897, + 898, + 950, + 1001, + 1008, + 1010, + 1015, + 1025, + 1028, + 1029, + 1030, + 1032, + 1034, + 1036, + 1037, + 1039, + 1041, + 1043, + 1045, + 1046, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1065, + 1066, + 1067, + 1068, + 1070, + 1071, + 1073, + 1083, + 1084, + 1086, + 1087, + 1090, + 1092, + 1094, + 1097, + 1098, + 1099, + 1100, + 1101, + 1104, + 1106, + 1107, + 1110, + 1111, + 1112, + 1165, + 1166, + 1170, + 1172, + 1173, + 1174, + 1176, + 1178, + 1179, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1194, + 1195, + 1196, + 1199, + 1200, + 1201, + 1202, + 1204, + 1205, + 1206, + 1207, + 1208, + 1210, + 1211, + 1214, + 1216, + 1218, + 1220, + 1221, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1233, + 1235, + 1236, + 1238, + 1240, + 1241, + 1242, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1254, + 1256, + 1261, + 1262, + 1263, + 1315, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1344, + 1352, + 1357, + 1360, + 1361, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1372, + 1375, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1387, + 1388, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1415, + 1416, + 1418, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1427, + 1428, + 1429, + 1430, + 1431, + 1433, + 1434, + 1435, + 1436, + 1438, + 1441, + 1442, + 1443, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1456, + 1457, + 1458, + 1459, + 1461, + 1462, + 1463, + 1464, + 1465, + 1467, + 1468, + 1469, + 1471, + 1476, + 1479, + 1482, + 1483, + 1484, + 1485, + 1486, + 1488, + 1489, + 1494, + 1495, + 1496, + 1499, + 1500, + 1502, + 1503, + 1505, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1517, + 1518, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1533, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1559, + 1560, + 1561, + 1563, + 1564, + 1565, + 1566, + 1568, + 1569, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1583, + 1584, + 1585, + 1586, + 1588, + 1589, + 1590, + 1591, + 1593, + 1594, + 1595, + 1597, + 1600, + 1601, + 1602, + 1639, + 1644, + 1772, + 1777, + 1778, + 1952, + 1956, + 1957, + 2003, + 2007, + 2008, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2022, + 2023, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2043, + 2044, + 2046, + 2047, + 2049, + 2050, + 2051, + 2055, + 2062, + 2065, + 2068, + 2069, + 2070, + 2072, + 2073, + 2074, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2086, + 2087, + 2088, + 2089, + 2090, + 2092, + 2093, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2122, + 2123, + 2125, + 2126, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2137, + 2138, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2149, + 2150, + 2151, + 2153, + 2154, + 2155, + 2156, + 2158, + 2159, + 2160, + 2162, + 2166, + 2214, + 2219, + 2220, + 2221, + 2224, + 2225, + 2227, + 2230, + 2231, + 2233, + 2234, + 2235, + 2236, + 2238, + 2239, + 2241, + 2242, + 2243, + 2244, + 2246, + 2247, + 2248, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2288, + 2293, + 2297, + 2298, + 2299, + 2300, + 2302, + 2303, + 2304, + 2305, + 2306, + 2308, + 2309, + 2314, + 2316, + 2317, + 2320, + 2321, + 2390, + 2395, + 2398, + 2401, + 2402, + 2403, + 2404, + 2405, + 2408, + 2410, + 2411, + 2413, + 2415, + 2416, + 2419, + 2420, + 2422, + 2423, + 2424, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2433, + 2434, + 2435, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2448, + 2452, + 2453, + 2454, + 2455, + 2457, + 2458, + 2459, + 2460, + 2463, + 2464, + 2465, + 2467, + 2468, + 2469, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2484, + 2485, + 2487, + 2488, + 2490, + 2491, + 2493, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2516, + 2517, + 2519, + 2520, + 2521, + 2523, + 2524, + 2525, + 2527, + 2533, + 2536, + 2550, + 2564, + 2565, + 2566, + 2567, + 2570, + 2571, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2581, + 2583, + 2588, + 2589, + 2598, + 2599, + 2600, + 2602, + 2603, + 2605, + 2609, + 2610, + 2611, + 2612, + 2613, + 2615, + 2616, + 2618, + 2619, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2644, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2656, + 2657, + 2658, + 2659, + 2661, + 2662, + 2664, + 2665, + 2666, + 2668, + 2669, + 2670, + 2672, + 2677, + 2678, + 2801, + 2805, + 2808, + 2809, + 2810, + 2811, + 2812, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2823, + 2824, + 2828, + 2829, + 2830, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2859, + 2860, + 2861, + 2863, + 2869, + 2870, + 2983, + 2986, + 2999, + 3000, + 3001, + 3003, + 3004, + 3008, + 3009, + 3010, + 3015, + 3016, + 3017, + 3018, + 3020, + 3021, + 3030, + 3031, + 3032, + 3035, + 3038, + 3039, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3050, + 3051, + 3052, + 3053, + 3054, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3064, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3126, + 3129, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3155, + 3156, + 3157, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3203, + 3204, + 3205, + 3206, + 3208, + 3209, + 3211, + 3212, + 3213, + 3214, + 3216, + 3217, + 3219, + 3220, + 3222, + 3223 + ], + "stdout": "FFFFFFFFFFFFFFF.FFFFFFFFFF [100%]\n================================== FAILURES ===================================\n_________ test_kde_labeled_regions_enclose_probability_mass[gaussian] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.00990103\nE Max relative difference among violations: 0.01000104\nE ACTUAL: array(0.999901)\nE DESIRED: array(0.99)\n_____ test_kde_labeled_regions_enclose_probability_mass[analytic_normal] ______\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.0078957\nE Max relative difference among violations: 0.00797546\nE ACTUAL: array(0.997896)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture31] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n_________ test_kde_labeled_regions_enclose_probability_mass[mixture7] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_kde_labeled_regions_enclose_probability_mass[mixture83] _________\ntests\\proofs_dimred_visualizer.py:136: in test_kde_labeled_regions_enclose_probability_mass\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.006\nE Actual label 99% disagrees with enclosed KDE mass\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.01\nE Max relative difference among violations: 0.01010101\nE ACTUAL: array(1.)\nE DESIRED: array(0.99)\n________ test_hr_region_vertices_have_gravity_units_and_stay_in_domain ________\ntests\\proofs_dimred_visualizer.py:195: in test_hr_region_vertices_have_gravity_units_and_stay_in_domain\n assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices\nE AssertionError: array([[ 8.0159500e+03, 2.8654500e+00],\nE [ 5.8577500e+03, 3.1280025e+00],\nE [ 4.3862500e+03, 3.5156000e+... [ 7.1821000e+03, 2.8654500e+00],\nE [ 7.3292500e+03, 2.3653500e+00],\nE [ 8.0159500e+03, 2.3653500e+00]])\nE assert np.False_\nE + where np.False_ = ((array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) >= np.float64(0.17999999999999994) & array([ 2.86545 , 3.1280025, 3.5156 , -93.3175 , 4.740825 ,\\n 4.040685 , 3.8364775, 3.573925 , ...90275 , 0.656675 , 2.36535 , 4.740825 , 4.740825 ,\\n 3.573925 , 2.86545 , 2.36535 , 2.36535 ]) <= np.float64(5.22)))\nE + where = np.all\n______________ test_hr_population_title_is_counted_or_omitted[6] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x00000256DECA44A0>)\n______________ test_hr_population_title_is_counted_or_omitted[9] ______________\ntests\\proofs_dimred_visualizer.py:211: in test_hr_population_title_is_counted_or_omitted\n assert not counts or all(v == n for v in counts), title\nE AssertionError: Diagramme de Hertzsprung-Russell\nE $\\times$ \u00b7 43 019 \u00e9toiles\nE assert (not [43019.0] or False)\nE + where False = all(. at 0x00000256E5D2EA40>)\n______ test_reconstruction_cardinality_cannot_reassign_spectral_classes _______\ntests\\proofs_dimred_visualizer.py:231: in test_reconstruction_cardinality_cannot_reassign_spectral_classes\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=1e-07, atol=0\nE Truncation is not observation identity\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 0.64102564\nE Max relative difference among violations: 0.00730994\nE ACTUAL: array(88.333333)\nE DESIRED: array(87.692308)\n___ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters] ___\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n______ test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr] ______\ntests\\proofs_dimred_visualizer.py:255: in test_cluster_colorbar_matches_actual_cluster_rgb\n visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates)\ntests\\visualizer_review_contracts.py:428: in assert_cluster_encoding\n assert np.allclose(value, rgb), f\"Misleading {kind} for C{cid}\"\n ^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: Misleading colorbar for C2\n___________ test_actual_unit_confidence_is_not_claimed_unavailable ____________\ntests\\proofs_dimred_visualizer.py:265: in test_actual_unit_confidence_is_not_claimed_unavailable\n assert not any(\"non disponible\" in t.get_text() for t in axes[1].texts)\nE assert not True\nE + where True = any(. at 0x00000256E5D2D0E0>)\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:277: in call\n return c.viz.plot_ae_embedding(c.Z, meta, c.y)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:1112: in plot_ae_embedding\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n_ test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed] _\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:278: in call\n return c.viz.plot_latent_zoomed(c.Z, c.y, meta)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsrc\\dimred\\dimred_visualizer.py:2321: in plot_latent_zoomed\n ax = axes[0]\n ^^^^^^^\nE TypeError: 'Axes' object is not subscriptable\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:280: in test_no_physical_columns_still_supports_classes_or_explicit_refusal\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental TypeError instead of explicit domain handling: 'Axes' object is not subscriptable\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[1] _______\ntests\\proofs_dimred_visualizer.py:19: in call_or_domain_refusal\n return call()\n ^^^^^^\ntests\\proofs_dimred_visualizer.py:298: in \n lambda: c.viz.plot_hdbscan_feature_profiles(\nsrc\\dimred\\dimred_visualizer.py:2032: in plot_hdbscan_feature_profiles\n ax_i.barh(range(5), vals, color=colors, edgecolor=\"none\")\n ^^^^^^^^^\nE AttributeError: 'numpy.ndarray' object has no attribute 'barh'\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:297: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n result = call_or_domain_refusal(\ntests\\proofs_dimred_visualizer.py:34: in call_or_domain_refusal\n pytest.fail(\nE Failed: Incidental AttributeError instead of explicit domain handling: 'numpy.ndarray' object has no attribute 'barh'\n______ test_cluster_profiles_unavailable_slots_not_presented_as_data[4] _______\ntests\\proofs_dimred_visualizer.py:306: in test_cluster_profiles_unavailable_slots_not_presented_as_data\n assert (\nE AssertionError: Empty slot looks like a measurement panel\nE assert ( or not True or not True)\nE + where = .patches\nE + and True = .axison\nE + and True = get_visible()\nE + where get_visible = .get_visible\n______ test_more_reconstructions_than_rows_has_no_empty_measurement_axes ______\ntests\\proofs_dimred_visualizer.py:319: in test_more_reconstructions_than_rows_has_no_empty_measurement_axes\n assert (\nE AssertionError: Visible panel needs original and reconstructed observations\nE assert 0 >= 2\nE + where 0 = len()\nE + where = .lines\n______ test_truncated_variance_annotation_does_not_attribute_wrong_mass _______\ntests\\proofs_dimred_visualizer.py:342: in test_truncated_variance_annotation_does_not_attribute_wrong_mass\n visualizer_contracts.assert_variance_annotations(\ntests\\visualizer_review_contracts.py:55: in assert_variance_annotations\n assert_allclose(\nE AssertionError: \nE Not equal to tolerance rtol=0, atol=0.05\nE Annotated component count and variance disagree\nE Mismatched elements: 1 / 1 (100%)\nE Max absolute difference among violations: 15.\nE Max relative difference among violations: 0.15\nE ACTUAL: array(85.)\nE DESIRED: array(100.)\n_______________ test_log_histogram_keeps_small_positive_errors ________________\ntests\\proofs_dimred_visualizer.py:356: in test_log_histogram_keeps_small_positive_errors\n assert missing == 0 or visualizer_contracts.exclusion_report(\nE AssertionError: Positive MSE population silently truncated\nE assert (np.int64(3) == 0 or False)\nE + where False = (, 'STAR', np.int64(3), 6, array([1.00000000e-04, 1.18276595e-04, 1.39893529e-04, 1.65461303e-04,\\n 1.95701995e-04, 2.31469657e-04, 2.737744...7.30528418e-01, 8.64044138e-01, 1.02196199e+00,\\n 1.20874184e+00, 1.42965869e+00, 1.69095162e+00, 2.00000000e+00]), array([1.e-08, 1.e-07, 1.e-06, 1.e-02, 1.e-01, 1.e+00]))\nE + where = .exclusion_report\n______________ test_histogram_does_not_silently_omit_fifth_class ______________\ntests\\proofs_dimred_visualizer.py:377: in test_histogram_does_not_silently_omit_fifth_class\n assert represented == set(labels), \"Palette length silently drops classes\"\nE AssertionError: Palette length silently drops classes\nE assert {'A', 'B', 'C', 'D'} == {np.str_('A')... np.str_('E')}\nE \nE Extra items in the right set:\nE np.str_('E')\nE Use -v to get more diff\n_ test_default_output_directory_applies_to_direct_exports[plot_training_history] _\ntests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1558/test_default_output_directory_0').glob\n___ test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca] ___\ntests\\proofs_dimred_visualizer.py:420: in test_default_output_directory_applies_to_direct_exports\n assert list(tmp_path.glob(\"*.png\")), \"Configured output_dir ignored\"\nE AssertionError: Configured output_dir ignored\nE assert []\nE + where [] = list()\nE + where = glob('*.png')\nE + where glob = WindowsPath('C:/Users/alexb/AppData/Local/Temp/pytest-of-alexb/pytest-1558/test_default_output_directory_1').glob\n_____________ test_trustworthiness_axis_contains_computed_values ______________\ntests\\proofs_dimred_visualizer.py:433: in test_trustworthiness_axis_contains_computed_values\n visualizer_contracts.assert_visible_or_disclosed(\ntests\\visualizer_review_contracts.py:342: in assert_visible_or_disclosed\n assert admitted, f\"Undisclosed clipped values for {name}: {vals}, range={lo,hi}\"\n ^^^^^^^^\nE AssertionError: Undisclosed clipped values for t-SNE: [0.5 0.55882353 0.50396825], range=(np.float64(0.75), np.float64(1.01))\n____________ test_default_eigenspectrum_line_labels_are_renderable ____________\ntests\\proofs_dimred_visualizer.py:445: in test_default_eigenspectrum_line_labels_are_renderable\n fig, axes = c.viz.plot_eigenspectra(\nsrc\\dimred\\dimred_visualizer.py:884: in plot_eigenspectra\n plt.tight_layout()\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\pyplot.py:2992: in tight_layout\n gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\figure.py:3665: in tight_layout\n engine.execute(self)\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\layout_engine.py:188: in execute\n kwargs = get_tight_layout_figure(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:266: in get_tight_layout_figure\n kwargs = _auto_adjust_subplotpars(fig, renderer,\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_tight_layout.py:82: in _auto_adjust_subplotpars\n bb += [martist._get_tightbbox_for_layout_only(ax, renderer)]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:1485: in _get_tightbbox_for_layout_only\n return obj.get_tightbbox(*args, **{**kwargs, \"for_layout_only\": True})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:4788: in get_tightbbox\n bbox = a.get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1091: in get_tightbbox\n return super().get_tightbbox(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\artist.py:393: in get_tightbbox\n bbox = self.get_window_extent(renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:1076: in get_window_extent\n bbox, _, _ = self._get_layout(self._renderer)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:479: in _get_layout\n w, h, d = _get_text_metrics_with_cache(\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:59: in _get_text_metrics_with_cache\n return get_text_metrics(text, fontprop.copy(), ismath, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\text.py:125: in _text_metrics\n return local_renderer.get_text_width_height_descent(text, fontprop, ismath)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:259: in get_text_width_height_descent\n parse = self.mathtext_parser.parse(s, self.dpi, prop)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:86: in parse\n return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\mathtext.py:100: in _parse_cached\n box = self._parser.parse(s, fontset, fontsize, dpi)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n..\\..\\..\\..\\Documents\\Projets\\AstroSpectro\\.venv\\Lib\\site-packages\\matplotlib\\_mathtext.py:2350: in parse\n raise ValueError(\"\\n\" + err.explain(0)) from None\nE ValueError: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\n\nDuring handling of the above exception, another exception occurred:\ntests\\proofs_dimred_visualizer.py:450: in test_default_eigenspectrum_line_labels_are_renderable\n assert False, f\"Valid default eigen-spectrum labels must render: {exc}\"\nE AssertionError: Valid default eigen-spectrum labels must render: \nE H$\\\\alpha$\nE ^\nE ParseException: Expected end of text, found '$' (at char 1), (line:1, col:2)\nE assert False\n____________ test_linear_histogram_truncation_discloses_population ____________\ntests\\proofs_dimred_visualizer.py:468: in test_linear_histogram_truncation_discloses_population\n convention, missing, edges = visualizer_contracts.assert_histogram_representation(\ntests\\visualizer_review_contracts.py:249: in assert_histogram_representation\n assert missing == 0 or exclusion_report(\nE AssertionError: Undisclosed conditional-density exclusion\n- generated xml file: C:\\Users\\alexb\\AppData\\Local\\Temp\\m28-synthetic-ng3ujfxu\\result.xml -\n=========================== short test summary info ===========================\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[gaussian]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[analytic_normal]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture31]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture7]\nFAILED tests/proofs_dimred_visualizer.py::test_kde_labeled_regions_enclose_probability_mass[mixture83]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_region_vertices_have_gravity_units_and_stay_in_domain\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[6]\nFAILED tests/proofs_dimred_visualizer.py::test_hr_population_title_is_counted_or_omitted[9]\nFAILED tests/proofs_dimred_visualizer.py::test_reconstruction_cardinality_cannot_reassign_spectral_classes\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_clusters]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_colorbar_matches_actual_cluster_rgb[plot_hdbscan_hr]\nFAILED tests/proofs_dimred_visualizer.py::test_actual_unit_confidence_is_not_claimed_unavailable\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_ae_embedding]\nFAILED tests/proofs_dimred_visualizer.py::test_no_physical_columns_still_supports_classes_or_explicit_refusal[plot_latent_zoomed]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[1]\nFAILED tests/proofs_dimred_visualizer.py::test_cluster_profiles_unavailable_slots_not_presented_as_data[4]\nFAILED tests/proofs_dimred_visualizer.py::test_more_reconstructions_than_rows_has_no_empty_measurement_axes\nFAILED tests/proofs_dimred_visualizer.py::test_truncated_variance_annotation_does_not_attribute_wrong_mass\nFAILED tests/proofs_dimred_visualizer.py::test_log_histogram_keeps_small_positive_errors\nFAILED tests/proofs_dimred_visualizer.py::test_histogram_does_not_silently_omit_fifth_class\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_training_history]\nFAILED tests/proofs_dimred_visualizer.py::test_default_output_directory_applies_to_direct_exports[plot_ae_vs_pca]\nFAILED tests/proofs_dimred_visualizer.py::test_trustworthiness_axis_contains_computed_values\nFAILED tests/proofs_dimred_visualizer.py::test_default_eigenspectrum_line_labels_are_renderable\nFAILED tests/proofs_dimred_visualizer.py::test_linear_histogram_truncation_discloses_population\n25 failed, 1 passed in 24.28s\n", + "stderr": "" + }, + "protected_unchanged": true +} diff --git a/audit/m28_r3_green_validation_results.json b/audit/m28_r3_green_validation_results.json new file mode 100644 index 0000000..1cb5f67 --- /dev/null +++ b/audit/m28_r3_green_validation_results.json @@ -0,0 +1,151 @@ +{ + "active_head": "8e668780b181948856cacb58650b25a0e03eeddf", + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "executable": "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "versions": { + "numpy": "2.4.6", + "pandas": "3.1.1", + "scipy": "1.17.1", + "scikit-learn": "1.9.1", + "matplotlib": "3.11.2", + "pytest": "8.4.2", + "black": "24.4.2", + "ruff": "0.5.0", + "pillow": "13.0.0" + }, + "effective_lf_sha256": { + "src/dimred/dimred_visualizer.py": "968207ab322c2eea40f8d1e3721c1e361a9d1f7912d511a48c5f6a2cb0f82b8a", + "tests/conftest.py": "a7d34a7227d4c62201975c4165c6b181e27290f6ac42924269bc5d0a98f9c8d6", + "tests/test_dimred_visualizer.py": "c62c2c3ededf2d0dfb74d394efddc05f7abfa2b5e9a6acf3baf8478050b6614e", + "tests/visualizer_review_contracts.py": "79671f840cc76d57ebdc1257b624c8de6078bc5db79023738f7128d3a77b0dec", + "tests/test_visualizer_review_contracts.py": "1d2818457af205945f30ea1774bab0aadcde707a4ded95f3bc92ac0c09e40e9a", + "audit/check_m28_evidence.py": "bac3e5210eb94a2642c3dbb6e79824899cb66920d1c11233f900de38a61d1485", + "audit/check_m28_boundaries.py": "72f0c956c8719acafe0d9c07fa05e93c3f4d69ce297a8befeccef73bad4cdfb0", + "audit/check_m28_validation.py": "fda730977f875e9b951171a89e5e14d44ca0fa7524e2c7651e45d743bc581e1b", + "audit/check_m28_review.py": "9a2a2e41e9e87a965f6f345432f619db60c697456d883a3b3a56f6ba4c8540e9" + }, + "commands": [ + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "tests/test_dimred_visualizer.py", + "tests/test_visualizer_review_contracts.py", + "-W", + "error", + "--junitxml=test-results/m28-targeted-validation.xml" + ], + "exit_code": 0, + "stdout": ".................................................................. [100%]\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-targeted-validation.xml -\n66 passed in 8.50s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "--junitxml=test-results/m28-complete-validation.xml" + ], + "exit_code": 0, + "stdout": "........................................................................ [ 10%]\n........................................................................ [ 20%]\n........................................................................ [ 30%]\n........................................................................ [ 41%]\n........................................................................ [ 51%]\n........................................................................ [ 61%]\n........................................................................ [ 72%]\n........................................................................ [ 82%]\n........................................................................ [ 92%]\n.................................................. [100%]\n============================== warnings summary ===============================\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_partial_esa_supplement_merges_without_losing_xmatch_rows\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_bulk_without_matches_stops_auto_fallback\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_cone_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_retry_limit_raises_or_falls_back_by_mode\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_transient_failure_retries_then_succeeds\n C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\tools\\gaia_crossmatcher.py:1210: Pandas4Warning: The inplace keyword in DataFrame.drop is deprecated and will be removed in a future version (PDEP-8).\n See https://pandas.pydata.org/docs/dev/whatsnew/v3.1.0.html#deprecation-inplace for more details.\n df_merged.drop(columns=[\"objid\"], inplace=True, errors=\"ignore\")\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-complete-validation.xml -\n698 passed, 62 deselected, 7 warnings in 23.30s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pytest", + "-q", + "--import-mode=importlib", + "--junitxml=test-results/m28-importlib-validation.xml" + ], + "exit_code": 0, + "stdout": "........................................................................ [ 10%]\n........................................................................ [ 20%]\n........................................................................ [ 30%]\n........................................................................ [ 41%]\n........................................................................ [ 51%]\n........................................................................ [ 61%]\n........................................................................ [ 72%]\n........................................................................ [ 82%]\n........................................................................ [ 92%]\n.................................................. [100%]\n============================== warnings summary ===============================\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_partial_esa_supplement_merges_without_losing_xmatch_rows\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_bulk_without_matches_stops_auto_fallback\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_cone_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_valid_xmatch_without_matches_is_not_a_service_failure\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_retry_limit_raises_or_falls_back_by_mode\ntests/test_gaia_crossmatcher.py::GaiaCrossmatchTests::test_xmatch_transient_failure_retries_then_succeeds\n C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\src\\tools\\gaia_crossmatcher.py:1210: Pandas4Warning: The inplace keyword in DataFrame.drop is deprecated and will be removed in a future version (PDEP-8).\n See https://pandas.pydata.org/docs/dev/whatsnew/v3.1.0.html#deprecation-inplace for more details.\n df_merged.drop(columns=[\"objid\"], inplace=True, errors=\"ignore\")\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n- generated xml file: C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro-m28\\test-results\\m28-importlib-validation.xml -\n698 passed, 62 deselected, 7 warnings in 23.78s\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "black", + "--check", + "src", + "tests", + "scripts", + "app.py", + "audit/check_m28_evidence.py", + "audit/check_m28_boundaries.py", + "audit/check_m28_validation.py", + "audit/check_m28_review.py" + ], + "exit_code": 0, + "stdout": "", + "stderr": "All done! \u2728 \ud83c\udf70 \u2728\n47 files would be left unchanged.\n" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "ruff", + "check", + "src", + "tests", + "scripts", + "app.py", + "audit/check_m28_evidence.py", + "audit/check_m28_boundaries.py", + "audit/check_m28_validation.py", + "audit/check_m28_review.py" + ], + "exit_code": 0, + "stdout": "All checks passed!\n", + "stderr": "" + }, + { + "command": [ + "C:\\Users\\alexb\\Documents\\Projets\\AstroSpectro\\.venv\\Scripts\\python.exe", + "-m", + "pip", + "check" + ], + "exit_code": 0, + "stdout": "No broken requirements found.\n", + "stderr": "" + }, + { + "command": [ + "git", + "diff", + "--check" + ], + "exit_code": 0, + "stdout": "", + "stderr": "" + }, + { + "command": [ + "git", + "diff", + "--exit-code", + "39dad874610745ccd456d26972e90f6fb3a11405", + "--", + "src", + "notebooks", + "data", + "models", + "requirements", + "pyproject.toml", + ".github", + "app.py", + "AGENTS.md" + ], + "exit_code": 0, + "stdout": "", + "stderr": "" + } + ], + "all_commands_passed": true +} diff --git a/tests/proofs_dimred_visualizer.py b/tests/proofs_dimred_visualizer.py deleted file mode 100644 index e582e6d..0000000 --- a/tests/proofs_dimred_visualizer.py +++ /dev/null @@ -1,472 +0,0 @@ -"""Explicit M2.8 counterexamples; archived and removed from the green head. - -No xfail and no production edits. Refusal, masking and unavailable outputs are -alternatives on invalid data; valid positive cases are in the green suite. -""" - -import re -from types import SimpleNamespace - -import numpy as np -from numpy.testing import assert_allclose, assert_array_equal -import pandas as pd -import pytest - - -def call_or_domain_refusal(call, domain): - """Permit relevant explicit refusal, never accept incidental backend errors.""" - try: - return call() - except (ValueError, RuntimeError) as exc: - message = str(exc).lower() - assert any(word in message for word in domain), message - assert not any( - word in message - for word in [ - "concatenate", - "percentile", - "0 columns", - "singular data covariance", - ] - ), message - return None - except Exception as exc: - pytest.fail( - f"Incidental {type(exc).__name__} instead of explicit domain handling: {exc}" - ) - - -def gaussian_population(n=250): - rng = np.random.default_rng(1729) - Z = rng.normal(size=(n, 2)) * [2.0, 3.0] - meta = pd.DataFrame({"teff_gspphot": np.arange(n, dtype=float) + 3500}) - return Z, np.array(["STAR"] * n), meta - - -@pytest.mark.parametrize( - "case", ["gaussian", "analytic_normal", "mixture31", "mixture7", "mixture83"] -) -def test_kde_labeled_regions_enclose_probability_mass( - visualizer_case, visualizer_contracts, monkeypatch, case -): - """Each displayed label belongs to an actual STAR iso-density geometry. - - Mass means fitted-estimator probability, not empirical fraction of stars. - The broad 0.05-grid mixture quadrature captures >.9999 total mass; .006 - allows cell-boundary discretization, independently checked by C13/K4/K5. - Geometry rtol=.05 covers interpolation on the production 200x200 grid. - """ - import scipy.stats - from matplotlib.axes import Axes - from matplotlib.path import Path - - c = visualizer_case - if case.startswith("mixture"): - rng = np.random.default_rng(int(case.removeprefix("mixture"))) - a = rng.normal(size=(210, 2)) * [1.0, 2.0] - b = rng.normal(size=(90, 2)) * [1.4, 0.7] + [6.0, 3.0] - nonstar = rng.normal(size=(40, 2)) * 0.3 + [6.0, -4.0] - Z = np.vstack([a, b, nonstar]) - y = np.array(["STAR"] * 300 + ["QSO"] * 40) - meta = pd.DataFrame({"teff_gspphot": np.linspace(3500, 9000, len(Z))}) - gx, gy = np.meshgrid(np.linspace(-12, 18, 601), np.linspace(-14, 14, 561)) - else: - Z, y, meta = gaussian_population() - g = np.linspace(-8, 8, 401) - gx, gy = np.meshgrid(2 * g, 3 * g) - stars = {tuple(row) for row in Z[y == "STAR"]} - fitted, labelled = [], [] - real = scipy.stats.gaussian_kde - original_clabel = Axes.clabel - - def fit(data, **kwargs): - estimator = ( - visualizer_contracts.AnalyticGaussian(data, **kwargs) - if case == "analytic_normal" - else real(data, **kwargs) - ) - fitted.append(estimator) - return estimator - - def clabel(ax, cs, *args, **kwargs): - geometry = [[segment.copy() for segment in level] for level in cs.allsegs] - labelled.append( - (ax, cs, kwargs.get("fmt", args[0] if args else None), geometry) - ) - return original_clabel(ax, cs, *args, **kwargs) - - monkeypatch.setattr(scipy.stats, "gaussian_kde", fit) - monkeypatch.setattr(Axes, "clabel", clabel) - fig, axes = c.viz.plot_latent_kde(Z, y, meta) - assert ( - fitted and labelled and fig is not None - ), "Valid KDE needs estimator and informative labelled contours" - estimator = fitted[0] - assert estimator.dataset.shape[1] >= 3 - assert all( - tuple(point) in stars for point in estimator.dataset.T - ), "KDE fitted on non-STAR observations" - if case.startswith("mixture"): - # n=150 random sampling: hypergeometric SE about .027 (p=.3,N=300). - # The .10 absolute envelope is conservative for this fixture; it is - # not a universal guarantee nor a mandatory sample-size rule. - assert_allclose( - np.mean(estimator.dataset[0] > 3), - 90 / 300, - atol=0.10, - rtol=0, - err_msg="Fitted STAR sample excludes or overrepresents a stellar mode", - ) - broad = estimator(np.vstack([gx.ravel(), gy.ravel()])) - cell = (gx[0, 1] - gx[0, 0]) * (gy[1, 0] - gy[0, 0]) - assert_allclose(broad.sum() * cell, 1, atol=1e-4) - points = np.column_stack([gx.ravel(), gy.ravel()]) - for ax, cs, fmt, geometry in labelled: - assert cs in ax.collections, "Must test the actual plotted contour artist" - claims = [] - for level, segments in zip(cs.levels, geometry): - label = fmt[level] if isinstance(fmt, dict) else fmt(level) - match = re.fullmatch(r"\s*(\d+(?:\.\d+)?)\s*%\s*", label) - assert match, f"Uninterpretable contour probability label: {label}" - claimed = float(match.group(1)) / 100 - claims.append(claimed) - mass = float(broad[broad >= level].sum() * cell) - if case == "analytic_normal": - assert_allclose(mass, max(0.0, 1 - 12 * np.pi * level), atol=0.006) - assert_allclose( - mass, - claimed, - atol=0.006, - rtol=0, - err_msg=f"Actual label {label} disagrees with enclosed KDE mass", - ) - nonempty = [segment for segment in segments if len(segment)] - assert nonempty, f"No contour geometry for label {label}" - enclosed = np.zeros(len(points), dtype=bool) - for segment in nonempty: - # Even/odd containment retains disjoint modes and excludes holes. - enclosed ^= Path(segment).contains_points(points) - polygon_mass = float(broad[enclosed].sum() * cell) - assert_allclose( - polygon_mass, - claimed, - atol=0.006, - rtol=0, - err_msg="Actual contour polygons do not enclose their labelled mass", - ) - vertices = np.vstack(nonempty) - for segment in nonempty: - assert_allclose( - segment[0], - segment[-1], - atol=1e-10, - rtol=0, - err_msg="A complete probability contour must be closed", - ) - xlim, ylim = sorted(ax.get_xlim()), sorted(ax.get_ylim()) - assert np.all( - (vertices[:, 0] >= xlim[0]) - & (vertices[:, 0] <= xlim[1]) - & (vertices[:, 1] >= ylim[0]) - & (vertices[:, 1] <= ylim[1]) - ), "Complete probability contours must be inside the displayed domain" - assert_allclose( - estimator(vertices.T), - level, - rtol=0.05, - atol=1e-10, - err_msg="Contour vertices are not on the fitted STAR iso-density", - ) - assert sorted(claims) == [0.68, 0.95, 0.99] - - -def test_hr_region_vertices_have_gravity_units_and_stay_in_domain(visualizer_case): - c = visualizer_case - _, ax = c.viz.plot_hr_teff_regions(c.meta) - # Independent input-domain envelope: never take admissible gravity units - # from limits chosen by the implementation under test. - gravity = c.meta.logg_gspphot.to_numpy() - temperature = c.meta.teff_gspphot.to_numpy() - low, high = gravity.min() - 0.1 * np.ptp(gravity), gravity.max() + 0.1 * np.ptp( - gravity - ) - assert ax.patches, "Valid HR regional figure must contain informative regions" - vertices = np.vstack([p.get_xy() for p in ax.patches]) - assert np.all((vertices[:, 1] >= low) & (vertices[:, 1] <= high)), vertices - tlo, thi = temperature.min() - 0.1 * np.ptp( - temperature - ), temperature.max() + 0.1 * np.ptp(temperature) - assert np.all((vertices[:, 0] >= tlo) & (vertices[:, 0] <= thi)) - - -@pytest.mark.parametrize("n", [6, 9]) -def test_hr_population_title_is_counted_or_omitted( - visualizer_case, visualizer_contracts, n -): - c = visualizer_case - meta = pd.concat([c.meta, c.meta.iloc[:3]], ignore_index=True).iloc[:n] - _, ax = c.viz.plot_hr_teff_regions(meta) - title = re.sub(r"(?:LAMOST|Gaia)\s*DR\s*\d+", "", ax.get_title(), flags=re.I) - counts = visualizer_contracts.numbers(title) - assert not counts or all(v == n for v in counts), title - - -def test_reconstruction_cardinality_cannot_reassign_spectral_classes(visualizer_case): - c = visualizer_case - # Original G row 4 was removed upstream; truncating assigns original F row 8 - # to G. Twelve retained F rows satisfy the >=10 - # display policy. Missing IDs cannot be reconstructed by this API. - types = np.array(["F"] * 4 + ["G"] * 4 + ["F"] * 9) - X = np.arange(17.0)[:, None] * 10 - keep = np.delete(np.arange(17), 4) - expected_F = X[keep][types[keep] == "F"].mean() - result = call_or_domain_refusal( - lambda: c.viz.plot_ae_recon_by_spectral_type( - X[keep], X[keep] + 2, types, ["feature_Hα_eq_width"] - ), - ["align", "length", "taille", "cardinal", "observ", "row"], - ) - if result is not None and result[0] is not None: - _, axes = result - assert_allclose( - axes[0].patches[0].get_height(), - expected_F, - err_msg="Truncation is not observation identity", - ) - - -@pytest.mark.parametrize("name", ["plot_hdbscan_clusters", "plot_hdbscan_hr"]) -def test_cluster_colorbar_matches_actual_cluster_rgb( - visualizer_case, hdbscan_module, name, visualizer_contracts -): - c = visualizer_case - hdb = hdbscan_module.HDBSCANAnalyzer() - hdb.labels_ = np.array([2, -1, 7, 2, 7, 2]) - hdb._compute_stats() - hdb._build_palette() - fig, axes = getattr(c.viz, name)( - c.Z, hdb, c.y if name.endswith("clusters") else c.meta - ) - coordinates = ( - c.Z - if name.endswith("clusters") - else c.meta[["teff_gspphot", "logg_gspphot"]].to_numpy() - ) - visualizer_contracts.assert_cluster_encoding(fig, axes[0], hdb.labels_, coordinates) - - -def test_actual_unit_confidence_is_not_claimed_unavailable(visualizer_case): - c = visualizer_case - _, axes = c.viz.plot_xgboost_umap( - c.Z, np.array(["F"] * 6), np.ones(6), np.array([0] * 6), {0: "blue"} - ) - # Supplied ones are compatible with genuine probability=1; no availability - # flag enters this API. Numeric values alone cannot establish absence. - assert not any("non disponible" in t.get_text() for t in axes[1].texts) - - -@pytest.mark.parametrize("name", ["plot_ae_embedding", "plot_latent_zoomed"]) -def test_no_physical_columns_still_supports_classes_or_explicit_refusal( - visualizer_case, name -): - c = visualizer_case - meta = c.meta[["obsid"]] - - def call(): - if name == "plot_ae_embedding": - return c.viz.plot_ae_embedding(c.Z, meta, c.y) - return c.viz.plot_latent_zoomed(c.Z, c.y, meta) - - result = call_or_domain_refusal( - call, ["physical", "param", "gaia", "column", "colonn"] - ) - if result is not None and result[0] is not None: - _, axes = result - ax = np.atleast_1d(axes)[0] - assert sum(len(sc.get_offsets()) for sc in ax.collections) == 6 - - -@pytest.mark.parametrize("n_show", [1, 0, 4]) -def test_cluster_profiles_unavailable_slots_not_presented_as_data( - visualizer_case, n_show -): - c = visualizer_case - means = pd.DataFrame( - [[1.0, 2, 3, 4, 5], [-1, -2, -3, -4, -5]], index=[2, 7], columns=list("abcde") - ) - result = call_or_domain_refusal( - lambda: c.viz.plot_hdbscan_feature_profiles( - means, np.array([2, 7, 7]), n_show=n_show - ), - ["cluster", "n_show", "positive", "count", "nombre"], - ) - if result is not None and result[0] is not None: - _, axes = result - for ax in np.asarray(axes).ravel(): - assert ( - ax.patches or not ax.axison or not ax.get_visible() - ), "Empty slot looks like a measurement panel" - - -def test_more_reconstructions_than_rows_has_no_empty_measurement_axes(visualizer_case): - c = visualizer_case - _, axes = c.viz.plot_ae_reconstruction( - c.Z[:2], c.Z[:2] + 1, ["a", "b"], n_samples=4 - ) - for ax in axes: - if not ax.axison or not ax.get_visible(): - continue - assert ( - len(ax.lines) >= 2 - ), "Visible panel needs original and reconstructed observations" - pair = [np.asarray(line.get_ydata()) for line in ax.lines[:2]] - assert all( - len(values) == 2 for values in pair - ), "Empty or incomplete reconstruction lines" - row = next((i for i in range(2) if np.array_equal(pair[0], c.Z[i])), None) - assert row is not None, "Panel is not an actual input observation" - assert_array_equal(pair[1], c.Z[row] + 1) - populated = [ax for ax in axes if ax.axison and ax.get_visible()] - assert len(populated) == 2 - - -def test_truncated_variance_annotation_does_not_attribute_wrong_mass( - visualizer_case, visualizer_contracts -): - c = visualizer_case - pca = SimpleNamespace( - explained_variance_ratio=np.array([0.6, 0.25, 0.15]), - n_components_for_variance=lambda threshold: 3, - ) - _, axes = c.viz.plot_variance_explained(pca, threshold=0.95, max_pcs=2) - visualizer_contracts.assert_variance_annotations( - axes[1], pca.explained_variance_ratio - ) - - -def test_log_histogram_keeps_small_positive_errors( - visualizer_case, visualizer_contracts, monkeypatch -): - c = visualizer_case - errors = np.array([1e-8, 1e-7, 1e-6, 0.01, 0.1, 1.0]) - calls = visualizer_contracts.capture_histograms(monkeypatch) - _, axes = c.viz.plot_ae_error_distribution_logscale(errors, np.array(["STAR"] * 6)) - call = next(call for call in calls if call["ax"] is axes[1]) - missing, edges = visualizer_contracts.assert_histogram_population(call, errors) - assert missing == 0 or visualizer_contracts.exclusion_report( - axes[1], "STAR", missing, 6, edges, errors - ), "Positive MSE population silently truncated" - - -def test_histogram_does_not_silently_omit_fifth_class( - visualizer_case, visualizer_contracts, monkeypatch -): - c = visualizer_case - labels = np.array(["A", "B", "C", "D", "E", "E"]) - calls = visualizer_contracts.capture_histograms(monkeypatch) - result = call_or_domain_refusal( - lambda: c.viz.plot_ae_error_distribution( - np.array([1.0, 2, 3, 4, 5, 9]), labels - ), - ["class", "palette", "population"], - ) - if result is None: - return - _, ax = result - represented = {label.split(" ")[0] for label in ax.get_legend_handles_labels()[1]} - assert represented == set(labels), "Palette length silently drops classes" - values = np.array([1.0, 2, 3, 4, 5, 9]) - assert len(calls) == 5, "Legend-only classes are not histogram populations" - for cls in set(labels): - call = next( - ( - call - for call in calls - if cls - in visualizer_contracts.tokens(call["label"]).union( - {s.upper() for s in visualizer_contracts.tokens(call["label"])} - ) - ), - None, - ) - assert call is not None, f"Missing actual histogram for class {cls}" - missing, _ = visualizer_contracts.assert_histogram_population( - call, values[labels == cls] - ) - assert missing == 0 - - -@pytest.mark.parametrize("name", ["plot_training_history", "plot_ae_vs_pca"]) -def test_default_output_directory_applies_to_direct_exports( - visualizer_case, tmp_path, name, visualizer_contracts -): - c = visualizer_case - viz = c.module.DimRedVisualizer(output_dir=tmp_path, dpi=30) - if name == "plot_training_history": - result = viz.plot_training_history( - {"train_loss": [2.0, 1], "val_loss": [3.0, 2]} - ) - else: - result = viz.plot_ae_vs_pca( - pd.DataFrame( - { - "method": ["PCA", "AE"], - "n_components": [1, 2], - "mse_mean": [0.5, 0.3], - } - ) - ) - assert result[0] is not None - assert list(tmp_path.glob("*.png")), "Configured output_dir ignored" - for path in tmp_path.glob("*.png"): - visualizer_contracts.assert_png_matches_figure(path, result[0], viz.dpi) - - -def test_trustworthiness_axis_contains_computed_values( - visualizer_case, visualizer_contracts -): - c = visualizer_case - rng = np.random.default_rng(1729) - X = rng.normal(size=(12, 2)) - bad = X[[7, 0, 9, 4, 1, 10, 2, 11, 3, 6, 5, 8]] - _, ax = c.viz.plot_trustworthiness(X, X, bad, k_values=[1, 2, 3]) - visualizer_contracts.assert_visible_or_disclosed( - ax, {"UMAP": ax.lines[0].get_ydata(), "t-SNE": ax.lines[1].get_ydata()} - ) - - -def test_default_eigenspectrum_line_labels_are_renderable(visualizer_case): - c = visualizer_case - pca = SimpleNamespace( - loadings=np.array([[0.1, -0.4, 0.9, -0.2]]), - explained_variance_ratio=np.array([1.0]), - ) - try: - fig, axes = c.viz.plot_eigenspectra( - pca, np.array([3800.0, 4400.0, 5500.0, 6800.0]), n_components=1 - ) - fig.canvas.draw() - except Exception as exc: - assert False, f"Valid default eigen-spectrum labels must render: {exc}" - assert_array_equal(axes[0].lines[0].get_ydata(), pca.loadings[0]) - - -def test_linear_histogram_truncation_discloses_population( - visualizer_case, visualizer_contracts, monkeypatch -): - """R10 candidate: conditional renormalization is not full-class coverage.""" - c = visualizer_case - stars = np.linspace(0.01, 0.1, 40) - qso = np.r_[[0.04, 0.09, 0.1], np.linspace(4, 7, 47)] - values = np.r_[stars, qso] - labels = np.array(["STAR"] * 40 + ["QSO"] * 50) - calls = visualizer_contracts.capture_histograms(monkeypatch) - _, axes = c.viz.plot_ae_error_distribution_logscale(values, labels) - call = next( - call for call in calls if call["ax"] is axes[0] and "QSO" in call["label"] - ) - convention, missing, edges = visualizer_contracts.assert_histogram_representation( - call, qso, "QSO" - ) - area = sum(p.get_width() * p.get_height() for p in call["result"][2]) - assert_allclose(area, (50 - missing) / 50 if convention == "total" else 1)